C++類型兼容性原則

#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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章