一、继承机制中构造与析构应用代码
#include <iostream>
#include <string>
using namespace std;
class Animal{//这里不给name私有原因是,主函数中子类访问了name,因为子类不能访问基类的私有成员,所以这里不给name私有
// private:
// string name;
public:
Animal(string theName);//基类构造器
void eat();
void sleep();
string name;
};
class Pig:public Animal
{
public:
void climb();
Pig(string thename);//子类构造器
};
Animal::Animal(string theName)
{
name=theName;
}
void Animal::eat()
{
cout<<"我正在吃\n\n"<<endl;
}
void Animal::sleep()
{
cout<<"我正在睡\n\n"<<endl;
}
Pig::Pig(string thename):Animal(thename)//初始化列表
{
}
void Pig::climb()
{
cout<<"我正在爬\n\n"<<endl;
}
int main()
{
Pig pig("阿水的阿里");//将字符串阿水的阿里直接给了name属性(基类,子类可共用)
cout<<"这只pig的名字:"<<pig.name<<endl;
pig.climb();
pig.eat();
pig.sleep();
return 0;
}
1、效果
2、解析
理解以下几步
1.pig的名字在pig的构造器中并没有初始化,为什么在主函数中给pig对象赋值了阿水的阿里,可以形成?
2.子类是否可以访问基类的私有成员?
3.pig的构造器如何定义?
理解以下图
- pig在定义构造器是,利用初始化列表将Animal的名字继承给了pig类,简单的说子类继承了基类
- 子类不能访问基类的私有成员变量
二、继承机制中构造器和析构器的调用时间
#include <iostream>
#include <string>
using namespace std;
class Animal{
public:
Animal();
~Animal();
void dosomething();
};
class Pig:public Animal
{
public:
Pig();
~Pig();
};
Animal::Animal()
{
cout<<"基类构造器正在被调用\n\n"<<endl;
}
Animal::~Animal()
{
cout<<"基类析构器正在被调用\n\n"<<endl;
}
void Animal::dosomething()
{
cout<<"基类的方法正在被调用\n\n"<<endl;
}
Pig::Pig()
{
cout<<"子类构造器正在被调用\n\n"<<endl;
}
Pig::~Pig()
{
cout<<"子类析构器正在被调用\n\n"<<endl;
}
int main()
{
Pig pig;
pig.dosomething();
cout<<"end!\n"<<endl;
return 0;
}
1.效果
从以上结果可以看出,基类与子类中构造器和析构器的调用时间