C++私有、保护、公有继承
2018-06-07 本文已影响0人
赤果_b4a7
来源为此处:https://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html ,在此基础上增加了函数,各种情况调用,看代码自己理解吧。。
#include<iostream>
using namespace std;
class A //父类
{
private:
int privatedateA;
void print_pri() { cout << "pri" << endl; }
protected:
int protecteddateA;
void print_pro() { cout << "pro" << endl; }
public:
int publicdateA;
void print_pub() { cout << "pub" << endl; }
};
//////////////////////////////////////////////////////////////////////////
class B :public A
{
public:
void funct()
{
int b;
//b = privatedateA; //error:基类中私有成员在派生类中是不可见的
b = protecteddateA; //ok:基类的保护成员在派生类中为保护成员
b = publicdateA; //ok:基类的公共成员在派生类中为公共成员
//print_pri(); // error:基类私有成员函数在派生类中是不可见的
print_pro();
print_pub();
}
};
//////////////////////////////////////////////////////////////////////////
class C :private A //基类A的派生类C(私有继承)
{
public:
void funct()
{
int c;
//c = privatedateA; //error:基类中私有成员在派生类中是不可见的
c = protecteddateA; //ok:基类的保护成员在派生类中为私有成员
c = publicdateA; //ok:基类的公共成员在派生类中为私有成员
//print_pri(); //ok:基类的保护成员函数在派生类中为私有成员函数
print_pro();
print_pub();
}
};
//////////////////////////////////////////////////////////////////////////
class D :protected A //基类A的派生类D(保护继承)
{
public:
void funct()
{
int d;
//d = privatedateA; //error:基类中私有成员在派生类中是不可见的
d = protecteddateA; //ok:基类的保护成员在派生类中为保护成员
d = publicdateA; //ok:基类的公共成员在派生类中为保护成员
//print_pri();
print_pro();
print_pub(); //ok:基类的公共成员函数在派生类中为保护成员函数
}
};
//////////////////////////////////////////////////////////////////////////
int main()
{
int a;
B objB;
//a = objB.privatedateA; //error:基类中私有成员在派生类中是不可见的,对对象不可见
//a = objB.protecteddateA; //error:基类的保护成员在派生类中为保护成员,对对象不可见
objB.publicdateA = 3;
a = objB.publicdateA; //ok:基类的公共成员在派生类中为公共成员,对对象可见.
//objB.print_pri();
//objB.print_pro();
objB.print_pub();
C objC;
//a = objC.privatedateA; //error:基类中私有成员在派生类中是不可见的,对对象不可见
//a = objC.protecteddateA; //error:基类的保护成员在派生类中为私有成员,对对象不可见
//a = objC.publicdateA; //error:基类的公共成员在派生类中为私有成员,对对象不可见
//objC.print_pri();
//objC.print_pro();
//objC.print_pub();
D objD;
//a = objD.privatedateA; //error:基类中私有成员在派生类中是不可见的,对对象不可见
//a = objD.protecteddateA; //error:基类的保护成员在派生类中为保护成员,对对象不可见
//a = objD.publicdateA; //error:基类的公共成员在派生类中为保护成员,对对象不可见
//objD.print_pri();
//objD.print_pro();
//objD.print_pub();
return 0;
}