📄 18多继承的构造函数.txt
字号:
/* 本程序在于说明:
*1.多继承情况下的构造函数的调用情况。见c++ primer 3/e p794
*2.虚拟析构函数机制。
*
*/
#include <iostream>
#include <string>
using namespace std;
/*
*
*/
class ZooAnimal {
public:
ZooAnimal();
ZooAnimal( const string & Name );
string GetName() const;
virtual ~ZooAnimal();
private:
string m_AnimalName;
};
ZooAnimal::ZooAnimal( const string & Name ) : m_AnimalName( Name )
{
cout << "ZooAnimal's constuctor is called" << endl;
}
ZooAnimal::ZooAnimal()
{
cout<<"ZooAnimal's default constructor is called!"<<endl;
}
string ZooAnimal::GetName() const //经过调试,此处的const不能省略,否则出现
//error C2511: “std::string ZooAnimal::GetName(void)” : “ZooAnimal”中没有找到重载的成员函数
{
return m_AnimalName;
}
ZooAnimal::~ZooAnimal()
{
cout<<" ZooAnimal's destructor is called !"<<endl;
}
/*
*
*
*/
class Bear : public ZooAnimal {
public:
Bear();
Bear( string & color );
virtual ~Bear();
private:
string m_color;
};
Bear::Bear()
{
cout << "Bear's default constructor is called!" << endl;
}
Bear::Bear( string & color ): m_color( color )
{
cout << "Bear's constructor is called" << endl;
}
Bear::~Bear()
{
cout << "Bear's destructor is called!" << endl;
}
/*
*
*/
class Endangered {
public:
Endangered();
Endangered( int age );
virtual ~Endangered();
private:
int m_age;
};
Endangered::Endangered()
{
cout<<"Endangered's default constructor is called" << endl;
}
Endangered::Endangered( int age )
{
m_age=age;
cout<<"Endangered's constructor is called" << endl;
}
Endangered::~Endangered()
{
cout << "Endangered's destructor is called! " << endl;
}
/*
*
*/
class Panda: public Bear, public Endangered {
public:
Panda();
Panda( string & color, int age );
void Pdosomething();
~Panda();
};
Panda::Panda( string & color, int age ): Bear( color ), Endangered( age )
{
cout << "Panda's constructor is called !" <<endl;
}
Panda::Panda()
{
cout << "Panda's default constructor is called!"<<endl;
}
Panda::~Panda()
{
cout << "Panda's destructor is called!"<<endl;
}
void Panda::Pdosomething()
{
cout << "dosomething of Panda!"<<endl;
}
/*
考察虚拟析构函数机制.
*/
int main()
{
cout<<"现在我们来考查虚拟析构函数机制!"<<endl;
//如果调用pb->Pdosomething();则出错:: error C2039: “dosomething” : 不是“Bear”的成员
Bear *pb = new Panda;
cout<<"现在我们删除指针pb"<<endl;
delete pb;
cout<<endl<<endl<<endl;
//如果把ZooAnimal的析构函数设置为非虚拟的(把virtual去掉),则执行下句编译不会出错,但是执行就会出错
ZooAnimal *pza = new Panda;
delete pza;
}
/*
考察多继承的构造函数情况
*/
/* int main()
{
string color("red");
int age=10;
Panda yingyang(color,age);
cout<<endl;
Bear &rb = yingyang; //如果调用rb.Pdosomething(); 则出错:error C2039: “Pdosomething” : 不是“Bear”的成员
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -