先用一个继承列子具体讲解一下吧~~
include <iostream>
using namespace std;
#define PI 3.14
class base //基类base
{
private:
int v1;
public:int v2;
base(int a=0,int b=0,int c=0)
{
v1=a;
v2=b;
v5=c;
}
int ares()
{
return v1*v2;
}
protected:
int v5;
};
class push :public base
{
private:
int v3;
public:
int v4;
push(){}
push(int a,int b)
{
v3=a;
v4=b;
}
void fun()
{
// cout <<v1<<endl;
cout <<v2<<endl;
cout <<v3<<endl;
cout <<v4<<endl;
cout <<v5<<endl;
}
};
//第一
int main()
{
base abj(2,2);
//cout <<abj.v2<<endl;
push obj(1,2); // 必须要有 push() 空的构造函数;如果只是声明一个空的push ,再给push赋值的时候
// 不要写 obj.push() 这样是错误的 ,应该写一个 input() 函数向里面赋值;
// 注意 声明新的push之后要初始化(构造函数也是为此设计的)
//cout <<obj.v1;
cout <<obj.v2;
// cout <<obj.v3;
cout <<obj.v4;
// cout <<obj.v5;
//obj.push(1,2); //错
obj.fun();
//cout <<obj.v2<<endl;
//cout <<obj.ares();
//cout <<obj.v3;
}
/*
公有和私有继承
以上面的 base 和 push 为例
如果 push为公有继承
那么 在 push 类内部和外部 都可以访问 base 的公有成员,
而 对于base 的私有成员 ,push类在的内部和外部都不能访问;
如果 push为私有继承
那么 在 push 类只能在 内部访问 base的公有成员 ,
那么更不用说 对于base 的私有成员 ,push类在的内部和外部都不能访问;
因此 私有继承 和公有继承 的区别 在于 基类(base)的公有成员能否在派生类(push)的外部访问
*/
在保护继承中,基类的公有成员和保护成员都以保护成员的身份出现在派生类中,而基类的私有成员不可直接访问。
也就是所,在保护继承下,基类的保护成员私有成员能在派生类的类中访问,而不能在访问。
比较私有继承和保护继承可以看出,实际上在直接派生时(只有做了一个派生),二者的区别就出现了,假设base派生出了push类,
而push类又派生出了 push++ 类。在私有继承中,base 中的保护成员和公有成员在push中都是私有成员,push++不能访问base中的任何成员
而在保护继承中,base 中的保护成员和公有成员在push中都是保护成员,push++可以访问base 中的保护成员和公有成员,
但是在push和push++类外都不能访问,
给三者排个序 private > protected >public
以下是基类各类成员在各类派生类的变化情况
#i