私有继承派生类会获得基类的一份备份,同时获得基类的public,protected接口的权利,以及重写基类虚函数的能力。组合没有这些能力。
私有继承和组合都能够表示基类和派生类的有一个的关系,即:派生类有一个基类。
下面代码是私有继承和组合的一些实现上的区别。
代码实例
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
// test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#pragma warning(disable:4996)
#include <string>
using namespace std;
class base{
private:
int i;
public:
base(int x) :i(x){ cout << "base is called i = " << i << endl; }
void print(void)
{
cout << "i = " << i << endl;
}
};
//私有继承
class child1:private base
{
private:
int j;
public:
child1(int x):base(x),j(x){
cout << "j = " << j << endl;
}
void print(void){
base::print();
}
};
//组合
class child2{
private:
base a;
public:
child2(int y): a(y){
cout << "child2(int y): a(y)