class 派生類名: 訪問控制關鍵字基類名1, 訪問控制關鍵字 基類名2,...
{
數據成員和成員函數聲明
};
沒啥好解釋的 訪問權限和單一繼承是一樣的
派生方式 | 基類的public成員 | 基類的protected成員 | 基類的private成員 | 派生方式引起的訪問屬性變化概括 |
private派生 | 變爲private成員 | 變爲private成員 | 不可見 | 基類中的非私有成員都成爲派生類中的私有成員 |
protected派生 | 變爲protected成員 | 變爲private成員 | 不可見 | 基類中的非私有成員在派生類中的訪問屬性都降一級 |
public派生 | 仍爲public成員 | 仍爲protected成員 | 不可見 | 基類中的非私有成員在派生類中的訪問屬性保持不變 |
測試代碼
#include<iostream>
using namespace std;
class CXAxis //定義X 座標類
{
public:
int xAxis;
CXAxis(int x=0) //構造函數
{
xAxis=x;
}
void SetX(int x) // 方法
{
xAxis=x;
}
void display() // 方法
{
cout<<"x座標:"<<xAxis<<endl;
}
};
class CYAxis //定義X 座標類
{
public:
int yAxis;
CYAxis(int y=0) //構造函數
{
yAxis=y;
}
void SetY(int y) // 方法
{
yAxis=y;
}
void display() // 方法 這裏定義成重名的 爲了說明二義性的問題
{
cout<<"y座標:"<<yAxis<<endl;
}
};
class CMyPoint:public CXAxis,public CYAxis
{
public:
CMyPoint(int x=20 ,int y=20):CXAxis(x),CYAxis(y) //構造函數
{
xAxis=x;
yAxis=y;
}
void SetPoint(int x,int y) // 方法
{
CXAxis::SetX(x);
CYAxis::SetY(y);
}
void displayPoint()
{
CXAxis::display();
CYAxis::display();
}
};
int main()
{
cout<<"類的多重繼承演示"<<endl;
CMyPoint P(10,20);
P.displayPoint();//顯示時間日期
cout<<"二義性測試"<<endl;
// P.display(); //ambiguous
P.CXAxis::display();
P.CXAxis::display();
cout<<"繼承的函數測試"<<endl;
P.SetX(200); //無同名的可以公有CXAxis 類的SetX
P.SetY(20);
P.displayPoint();//顯示時間日期
return 0;
}