1,私有派生
私有派生,所有的基类的共有成员将成为派生类的私有成员。例如:使用私有派生的例子。
#include<iostream>
using namespace std;
class Base //基类
{
private:
int a;
public:
void Seta(int i=0)
{
a=i;
}
void PrintBase() const
{
cout << "Base a=" << a << endl;
}
};
class Derived:private Base //基类的共有成员成为派生类的私有成员
{
private:
int b;
public:
void Set(int i=0,int j=0)
{
Seta(i);
b=j;
}
void Print() const
{
PrintBase();
cout << "Derived b=" << b << endl;
}
};
int main()
{
Derived b;
b.Set(1,9);
b.Print();
return 0;
}
结果:

共有派生
使用共有派生,基类的共有成员,成为派生类的共有成员,基类的私有部分成为派生类的一部分,但只能通过基类共有和保护方法访问。将上个例子修改为共有派生。注意差别。
#include<iostream>
using namespace std;
class Base
{
private:
int a;
public:
void Seta(int i=0)
{
a=i;
}
void PrintBase() const
{
cout << "Base a=" << a << endl;
}
};
class Derived:public Base
{
private:
int b;
public:
void Set(int i=0,int j=0)
{
Seta(i);
b=j;
}
void Print() const
{
PrintBase();
cout << "Derived b=" << b << endl;
}
};
int main()
{
Derived b;
b.Set(1,9);
b.Print();
b.Seta(6);
b.PrintBase();
b.Print();
return 0;
}

。
共有派生的基类和派生类之间是一种承上启下的扩展关系,可达到很深的继承关系。
私有派生 的基类和派生类之间是一种包含的关系,不能达到很深的继承层次,适用性不广。
无论私有派生还是共有派生,
派生类都无法访问其基类的私有成员。