⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 18多继承的构造函数.txt

📁 里面的代码是自己写的,构思来自于c++primer,对于学习c++语法有非常大的帮助,希望对c++初学者有所帮助
💻 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 + -