//程序作者:管寧
//站點:www.cndev-lab.com
//所有稿件均有版權,如要轉載,請務必著名出處和作者
#include <iostream>
using namespace std;
class Vehicle {
public:
Vehicle(int weight = 0) {
Vehicle::weight = weight;
cout << "載入Vehicle類構造函數" << endl;
}
void SetWeight(int weight) {
cout << "重新設置重量" << endl;
Vehicle::weight = weight;
}
virtual void ShowMe() = 0;
protected:
int weight;
};
class Car: virtual public Vehicle//汽車,這裡是虛擬繼承
{
public:
Car(int weight = 0, int aird = 0) : Vehicle(weight) {
Car::aird = aird;
cout << "載入Car類構造函數" << endl;
}
void ShowMe() {
cout << "我是汽車!" << endl;
}
protected:
int aird;
};
class Boat: virtual public Vehicle//船,這裡是虛擬繼承
{
public:
Boat(int weight = 0, float tonnage = 0) : Vehicle(weight) {
Boat::tonnage = tonnage;
cout << "載入Boat類構造函數" << endl;
}
void ShowMe() {
cout << "我是船!" << endl;
}
protected:
float tonnage;
};
class AmphibianCar: public Car, public Boat//水陸兩用汽車,多重繼承的體現
{
public:
AmphibianCar(int weight, int aird, float tonnage) : Vehicle(weight), Car(weight, aird), Boat(weight, tonnage)
//多重繼承要注意調用基類構造函數
{
cout << "載入AmphibianCar類構造函數" << endl;
}
void ShowMe() {
cout << "我是水陸兩用汽車!" << endl;
}
void ShowMembers() {
cout << " 重量:" << weight << "頓," << "空氣排量:" << aird << "CC," << "排水量:" << tonnage << " 頓" << endl;
}
};
int main() {
AmphibianCar a(4, 200, 1.35f);
a.ShowMe();
a.ShowMembers();
a.SetWeight(3);
a.ShowMembers();
system("pause");
return 0;
}載入Vehicle類構造函數 載入Car類構造函數 載入Boat類構造函數 載入AmphibianCar類構造函數 我是水陸兩用汽車! 重量:4頓,空氣排量:200CC,排水量:1.35 頓 重新設置重量 重量:3頓,空氣排量:200CC,排水量:1.35 頓 請按任意鍵繼續 . . .但是C++多重繼承有個問題是當繼承的方法或變數有相同的時候,到底要用哪種呢?
是否有方法可以直接指定要用哪個繼承的方法?
#include <iostream>
using namespace std;
class AA {
public:
AA() {
}
void fat() {
printf("Addidas is Fat\n");
}
};
class BB {
public:
BB() {
}
void fat() {
printf("Bill is Fat\n");
}
};
class CC: public AA, public BB {
public:
using AA::fat;
CC() {
}
};
class DD: public AA, public BB {
public:
DD() {
}
};
int main() {
CC ca;
printf("C is call..: ");
ca.fat();
DD da;
printf("D is call..: \n");
da.AA::fat();
da.BB::fat();
return 0;
}C is call..: Addidas is Fat D is call..: Addidas is Fat Bill is Fat由此可知,AA::fat() 與 using AA::fat ,皆可指定繼承的哪個方法會被使用。







0 意見:
張貼留言