1. 程式人生 > >C++快速入門繼承機制中的構造器和析構器、訪問限制、覆蓋和過載、友元

C++快速入門繼承機制中的構造器和析構器、訪問限制、覆蓋和過載、友元

繼承機制中的構造器和析構器

構造器是類初始化建立時呼叫的方法

--構造器的名字就是類的名字

析構器是類執行完後記憶體回收執行的方法

--析構器的名字~類名字

舉例看下在程式碼中執行的順序吧

/*
繼承機制中的構造器和析構器
*/
#include <iostream>
#include <string>

class People
{
public:
	People();
	~People();
};

class Xiaoming :public People
{
public:
	Xiaoming();
	~Xiaoming();
};

int main()
{
	Xiaoming xiaoming;
	std::cout << "我是建立類成功後列印的" << std::endl;
	return 0;
}

People::People()
{
	std::cout << "People() " << std::endl;
}

People::~People()
{
	std::cout << "~People()" << std::endl;
}

Xiaoming::Xiaoming()
{
	std::cout << "Xiaoming() " << std::endl;
}

Xiaoming::~Xiaoming()
{
	std::cout << "~Xiaoming()" << std::endl;
}

 執行的結果如下:

先執行基類People的構造器,再執行子類的構造器,接著執行Main()裡面的其他方法,最後先執行子類的析構器,最後才執行基類的析構器

訪問限制

在基類被派生出新的類的的時候,會出現一基類屬性和基方法是不想讓派生類訪問到的,所以就出現了訪問限制

訪問限制C++裡面是三種

public   公共的   都可以訪問修改

protected  保護的  在基類和派生類裡面能訪問

private    私有的   只在自己類裡面才能訪問

覆蓋和過載

派生類會繼承基類的公開的屬性和方法

覆蓋

--派生類覺得基類的方法不足以實現自己想要的功能時,可以寫一個和基類一樣名字的方法,覆蓋基類的方法(一模一樣,方法名,引數都相同)

過載

--派生類實現一個跟基類一樣名字的方法,但是,但是引數型別或者引數個數不同,從而實現函式的過載,這裡需要注意的時,函式的返回值不同是不能當做過載的

友元

友元--一種特殊的類關係

在不是基類和派生類的兩個類中,一個類需要用到另外一個類中的某一個屬性或者方法時,可以使用友元來實現

友元的實現:friend class 類名

這個定義的語句可以放在類中的公共、保護、私有的任何下面都是可以的

例如:

/*
友元
*/
#include <iostream>
#include <string>

class People
{
public:
	People();
	~People();
	void eat();
	friend class Animal;
};

class Animal
{
public:
	Animal();
	~Animal();
	void run();
	
};

int main()
{
	People xiaoming;
	xiaoming.run();
	return 0;
}

 void Animal::run()
{
	 std::cout << "run()" << std::endl;
}

People::People()
{
	std::cout << "People() " << std::endl;
}

People::~People()
{
	std::cout << "~People()" << std::endl;
}

Animal::Animal()
{
	std::cout << "Xiaoming() " << std::endl;
}

Animal::~Animal()
{
	std::cout << "~Xiaoming()" << std::endl;
}

 使用友元類時注意:             (1) 友元關係不能被繼承。             (2) 友元關係是單向的,不具有交換性。若類B是類A的友元,類A不一定是類B的友元,要看在類中是否有相應的宣告。             (3) 友元關係不具有傳遞性。若類B是類A的友元,類C是B的友元,類C不一定是類A的友元,同樣要看類中是否有相應的申明

注意事項:

--友元可以訪問類的私有成員。

--只能出現在類定義內部,友元宣告可以在類中的任何地方,一般放在類定義的開始或結尾。

--友元可以是普通的非成員函式,或前面定義的其他類的成員函式,或整個類。

--類必須將過載函式集中每一個希望設為友元的函式都宣告為友元。

--友元關係不能繼承,基類的友元對派生類的成員沒有特殊的訪問許可權。如果基類被授予友元關係,則只有基類具有特殊的訪問許可權。該基類的派生類不能訪問授予友元關係的類。