public protected private
共有继承 public protected 不可见
私有继承 private private 不可见
保护继承 protected protected 不可见
#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; }
如果是private继承,可以使用public,使得基类中的一些成员对外可见,如果这些成员在基类中是protected或者public。
// test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cstdlib>
#include <new>
#include <iostream>
using namespace std;
class Base{
public:
int f(){
cout<<"int f() Base"<<endl;
return 0;
}
int g(){
cout<<"int g() Base"<<endl;
return 0;
}
};
class Derived1:private Base{
public:
int h()
{
cout<<"int h() Derived1"<<endl;
return Base::f();
}
public:
Base::g;
};
int _tmain(int argc, _TCHAR* argv[])
{
Derived1 d1;
Base b;
d1.h();
d1.g();
return 0;
}