#include <iostream>
using namespace std;
class Parent {
public:
void printP()
{
cout << "parent" << endl;
}
Parent()
{
cout << "Parent構造函數" << endl;
}
// 拷貝構造函數
Parent(const Parent &obj)
{
cout << "Parent的拷貝構造函數" << endl;
}
private:
int a;
};
class Child :public Parent
{
public:
void printC()
{
cout << "child" << endl;
}
Child()
{
cout << "Child構造函數" << endl;
}
private:
int c;
};
// C++編譯器是不會報錯的
void howToPrint(Parent *base)
{
// 父類的成員函數
base->printP();
}
void howToPrint(Parent &base)
{
base.printP();
}
int main()
{
Parent p1;
p1.printP();
Child c1;
c1.printC();
c1.printP();
// 類型兼容性原則
// 1-1.基類指針(引用) 指向 父對象
Parent *p = NULL;
p = &c1;
// 執行的是子類的這個函數
p->printP();
cout << "------------" << endl;
// 1-2.指針做函數參數
howToPrint(&p1);
howToPrint(&c1);
// 1-3.引用做函數參數
cout << "------------" << endl;
howToPrint(p1);
howToPrint(c1);
// 2: 可以用子類對象初始化父類對象
// 子類就是一種特殊的父類
Parent p3 = c1; // 會調用父類的拷貝構造函數
system("pause");
return 1;
}
C++類型兼容性原則
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.