protected访问范围说明符
类的成员可以是私有成员,公有成员,保护成员。
私有成员只能类中的成员函数可以访问,公有成员就跟全局变量一样,什么地方都可以访问到。
那么保护成员呢?
保护成员和私有成员的区别就在于继承的类的访问问题上。
一个派生类中父类继承过来的私有成员是不能访问到的,因为私有成员只有定义它的类可以用,继承过来的不能用,放在派生类里面,但是只有基类的成员函数能访问到,,如果想要继承下去的能用上,又不想让其他类访问,就可以定义成保护成员。
基类的保护成员可以在派生类的成员函数中被访问
派生类的成员函数中不能访问基类的私有成员
在基类中,一般都将需要隐藏的成员说明为保护成员而非私有成员
派生类的构造函数和析构函数
在执行一个派生类的构造函数之前,总是先执行基类的构造函数
派生类对象消亡时,先执行派生类的析构函数,再执行基类的析构函数
和封闭类说明成员对象如何初始化类似,派生类说明基类对象如何初始化,也需要在构造函数后面添加初始化列表。
构造函数名(形参表):基类名(基类构造函数实参表)
{
}
#include <iostream>
#include <string>
using namespace std;
class CBug
{
int legNum, color;
public:
CBug(int ln, int cl) : legNum(ln), color(cl)
{
cout << "CBug Constructor" << endl;
}
~CBug()
{
cout << "CBug Destructor" << endl;
}
void PrintInfo()
{
cout << legNum << "," << color << endl;
}
};
class CFlyingBug : public CBug
{
int wingNum;
public:
// CFlyingBug() {};
CFlyingBug(int ln, int cl, int wn) : CBug(ln, cl), wingNum(wn)
{
cout << "CFlyingBug Constructor" << endl;
}
~CFlyingBug()
{
cout << "CFlyingBug Destructor" << endl;
}
};
int main()
{
CFlyingBug fb(2, 3, 4);
fb.PrintInfo();
return 0;
}
程序输出结果为:
CBug Constructor
CFlyingBug Constructor
2,3
CFlyingBug Destructor
CBug Destructor
程序第27行构造函数没有说明基类对象如何进行初始化,也就意味着对基类要用无参构造函数初始化,但是CBug类并没有无参构造函数,所以编译会出错。