以下例子都基于上面的图片:
私有继承:
# include <iostream>
using namespace std;
class human {
public:
human();
void get_();
void display_();
private:
string name;
string sex;
double age;
protected:
double hight;
};
human::human() {
name = "\0";
sex = "\0";
age = 0;
hight = 0;
}
void human::get_() {
cin >> name >> sex >> age;
age += 1;//可以使用子类的成员函数来调用该函数从而实现改变父类私有变量。
}
void human::display_() {
cout << name << " " << sex << " " << age << endl;
}
//私有继承
class student :private human {
public:
student();
void get__();
void display__();
private:
int id;
int class_;
};
student::student() {
id = 0;
class_ = 0;
}
void student::get__() {
age += 1;// 错误 由于是基类中的私有成员变量,
//私有继承之后,依旧是基类的私有成员变量,派生类是不可访问的
hight += 1;// 正确 在基类中是protected 通过私有继承变为派生类的私有变量,
//在该类中依旧可以被调用
get_(); //正确 在基类中是公共成员函数,在派生类中作为私有成员函数,依旧可以被访问
cin >> id >> class_;
}
void student::display__() {
display_();//私有继承子类依旧可调用父类的公有函数(该公有函数相当于是该子类的私有函数)
cout << id << " " << class_ << endl;
}
int main() {
student st;
st.get__();
st.display__();
age = age + 1; //错误 基类中的私有变量,同理不可访问
hight += 1; //错误,在基类中为保护权限,通过私有继承之后变为,私有权限,在派生类外是不可访问的
st.display_();//错误 在基类中是公有成员函数,但由于是私有继承,变为派生类的私有成员函数,则在派生类外是不可调用
return 0;
}
公共继承和保护继承的代码可以自己下去敲一敲,我这里就放上私有继承的。