public继承:
父类public成员被子类public继承后,父类成员将属于子类的public成员;
通过子类的对象可以访问父类的public成员 或成员函数;
父类protected成员被子类public继承后,父类成员将属于子类的protected成员;
通过子类的对象只能访问子类的成员函数,无法访问父类的protected成员 或成员函数;
父类private成员不能被子类public继承。
protected继承:
通过子类的对象只能访问子类的成员函数,无法访问父类的public成员 或成员函数;
父类protected成员被子类protected继承后,父类成员属于子类的protected成员;
通过子类的对象只能访问子类的成员函数,无法访问父类的protected成员 或成员函数;
父类private成员不能被子类 protected继承。
private继承:
父类public成员被子类 private继承后,父类成员将属于子类的 private成员;
通过子类的对象只能访问子类的成员函数,无法访问父类的public成员 或成员函数;
父类protected成员被子类 private继承后,父类成员将属于子类的 private成员;
通过子类的对象只能访问子类的成员函数,无法访问父类的protected成员 或成员函数;
父类private成员不能被子类 private继承。
#include<iostream>
using namespace std;
//
class A //父类
{
private:
int privatedateA;
protected:
int protecteddateA;
public:
int publicdateA;
};
//
class B :public A //基类A的派生类B(共有继承)
{
public:
void funct()
{
int b;
b=privatedateA; //error:基类中私有成员在派生类中是不可见的
b=protecteddateA; //ok:基类的保护成员在派生类中为保护成员
b=publicdateA; //ok:基类的公共成员在派生类中为公共成员
}
};
//
class C :private A //基类A的派生类C(私有继承)
{
public:
void funct()
{
int c;
c=privatedateA; //error:基类中私有成员在派生类中是不可见的
c=protecteddateA; //ok:基类的保护成员在派生类中为私有成员
c=publicdateA; //ok:基类的公共成员在派生类中为私有成员
}
};
//
class D :protected A //基类A的派生类D(保护继承)
{
public:
void funct()
{
int d;
d=privatedateA; //error:基类中私有成员在派生类中是不可见的
d=protecteddateA; //ok:基类的保护成员在派生类中为保护成员
d=publicdateA; //ok:基类的公共成员在派生类中为保护成员
}
};
//
int main()
{
int a;
B objB;
a=objB.privatedateA; //error:基类中私有成员在派生类中是不可见的,对对象不可见
a=objB.protecteddateA; //error:基类的保护成员在派生类中为保护成员,对对象不可见
a=objB.publicdateA; //ok:基类的公共成员在派生类中为公共成员,对对象可见
C objC;
a=objC.privatedateA; //error:基类中私有成员在派生类中是不可见的,对对象不可见
a=objC.protecteddateA; //error:基类的保护成员在派生类中为私有成员,对对象不可见
a=objC.publicdateA; //error:基类的公共成员在派生类中为私有成员,对对象不可见
D objD;
a=objD.privatedateA; //error:基类中私有成员在派生类中是不可见的,对对象不可见
a=objD.protecteddateA; //error:基类的保护成员在派生类中为保护成员,对对象不可见
a=objD.publicdateA; //error:基类的公共成员在派生类中为保护成员,对对象不可见
return 0;
}
*** 值得注意的是:外部调用(如主函数中直接调用)只能调用public里的成员及函数。内部成员函数(在同一个类里面)却可以调用包括其本身的public、protected、private内成员。