int a = Fn1();
cout << \ return 0; } int Fn1() {
int * p = newint (5); return *p; } 解:
此程序中给*p分配的内存没有被释放掉。 改正:
#include
int *p=new int(5); return p; } int main() {
int *a=fn1();
cout<<\ delete a; return 0; }
7-2 派生类构造函数执行的次序是怎样的? 解:
派生类构造函数执行的一般次序为:调用基类构造函数;调用成员对象的构造函数;派生类的构造函数体中的内容。
7-4 什么叫做虚基类?有何作用? 解:
当某类的部分或全部直接基类是从另一个基类派生而来,这些直接基类中,从上一级基类继承来的成员就拥有相同的名称,派生类的对象的这些同名成员在内存中同时拥有多个拷贝,我们可以使用作用域分辨符来唯一标识并分别访问它们。我们也可以将直接基类的共同基类设置为虚基类,这时从不同的路径继承过来的该类成员在内存中只拥有一个拷贝,这样就解决了同名成员的唯一标识问题。虚基类的声明是在派生类的定义过程,其语法格式为: class 派生类名: virtual继承方式基类名上述语句声明基类为派生类的虚基类,在多继承情况下,虚基类关键字的作用范围和继承方式关键字相同,只对紧跟其后的基类起作用。声明了虚基类之后,虚基类的成员在进一步派生过程中,和派生类一起维护一个内存数据拷贝。
7-6 定义一个哺乳动物 Mammal类,再由此派生出狗 Dog类,定义一个 Dog类的对象,观察基类与派生类的构造函数与析构函数的调用顺序。 解: 源程序:
#include
enum myColor{BLACK,WHITE};
6 / 9
class Mammal {
public: //构造函数 Mammal();
~Mammal(); //访问数据成员 int GetAge() const{return itsAge;} void SetAge(int age){itsAge=age;} int GetWeight() const {return itsWeight;}
void SetWeight(int weight){itsWeight=weight;} //其他函数 void Speak() const {cout<<\ protected: int itsAge; int itsWeight; };
class Dog:public Mammal { public: Dog(); ~Dog();
myColor GetColor() const{return itsColor;} void SetColor (myColor color){itsColor=color;} void WagTail(){cout<<\\\n\ private:
myColor itsColor; };
Mammal::Mammal():itsAge(1),itsWeight(5){ cout<<\\\n\ }
Mammal::~Mammal(){
cout<<\\\n\ }
Dog::Dog():itsColor(WHITE){ cout<<\\\n\ }
Dog::~Dog() {
cout<<\\\n\ } int main() {
Dog Jack; Jack.Speak(); Jack.WagTail();
cout<<\ return 0;
7 / 9
}
7-7 定义一个基类,构造其派生类,在构造函数中输出提示信息,观察构造函数的执行情况。 解:
#include
BaseClass::BaseClass() {
cout << \构造基类对象!\ }
class DerivedClass : public BaseClass { public:
DerivedClass(); };
DerivedClass::DerivedClass() {
cout << \构造派生类对象!\ }
void main() {
DerivedClass d; }
程序运行输出: 构造基类对象!
8-1 什么叫做多态性 ?在 C++中是如何实现多态的? 解:
多态是指同样的消息被不同类型的对象接收时导致完全不同的行为,是对类的特定成员函数的再抽象。 C++支持的多态有多种类型,重载 (包括函数重载和运算符重载 )和虚函数是其中主要的方式。
8-2 什么叫做抽象类?抽象类有何作用?抽象类的派生类是否一定要给出纯虚函数的实现? 解:
带有纯虚函数的类是抽象类。抽象类的主要作用是通过它为一个类族建立一个公共的接口,使它们能够更有效地发挥多态特性。抽象类声明了一组派生类共同操作接口的通用语义,而接口的完整实现,即纯虚函数的函数体,要由派生类自己给出。但抽象类的派生类并非一定要给出纯虚函数的实现,如果派生类没有给出纯虚函数的实现,这个派生类仍然是一个抽象类。
8-5 编写一个哺乳动物类Mammal,再由此派生出狗类Dog ,两者都声明Speak()成员函数,该函数在
基类中被声明成虚函数,声明一个Dog类的对象,通过此对象调用Speak函数,观察运行结果 解:
#include
8 / 9
class Mammal { protected: char name[10]; public: virtual void set() {
strcpy(name,\哈哈\ }
virtual void speak() {
cout<<\这是哺乳动物\} };
class Dog:public Mammal { public: void set() {
strcpy(name,\哈哈\}
void speak() {
cout<<\这是哺乳动物:狗\} };
void fun(Mammal &s) { s.speak(); }
void main() {
Mammal m1; Dog d2; fun(m1); fun(d2); }
运行结果: 这是哺乳动物 这是哺乳动物:狗
9 / 9
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库c++语言程序设计课后答案(2)在线全文阅读。
相关推荐: