C++基礎一

Topic1:構造函數初始化列表。

Q1:何時需要使用參數化列表進行類成員初始化?

case1:當類中包含的類對象成員沒有默認的構造函數時候。

#include <iostream>
class A
{
private:
	int i;
public:
	A(int i){std::cout<<"A(int)"<<std::endl;}


};
class B
{
private:
	
	A a;
public:
	B():a(3)//這裏A類重新寫了帶參數的構造函數,所以必須在參數列表初始化否則報錯說不存在A()構造函數
	{
		std::cout<<"B()"<<std::endl;
	}

};
int main()
{
	B b;
	return 0;
}


Case2:當成員函數含有const成員或者成員的&

#include <iostream>
class A
{
private:
	const int i;
public:
	A():i(1){//注意在參數列表對const成員初始化

        std::cout<<"A()"<<std::endl;

       }


};


#include <iostream>
class A
{
private:
	 int &i;
public:
	A(int j):i(j)//注意在參數列表構造成員的&

       {

 

        std::cout<<"A()"<<std::endl;

 

       }

};


Case3:派生類的構造函數數的參數列表初始化父類成員


#include <iostream>
class Base
{
private:
	int i;
public:
	Base(int i)
	{
		this->i=i;
		std::cout<<"Base()"<<std::endl;
	}
};
class Child:public Base
{
private:
public:
	Child():Base(1)
	{
		std::cout<<"Child()"<<std::endl;
	}
};




//注意:參數列表初始化的是成員定義的順序,不是參數列表的順序

#include <iostream>
class A{};
class B{};
class C
{
private:
	A a;
	B b;
public:
	C():b(),a()//注意還是調用A的構造函數然後是B的構造函數
	{
		std::cout<<" C()"<<std::endl;
	}
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章