C言語でオブジェクトの初期化リスト++

 

その理由が表示されます(1)オブジェクトの初期化リスト

       1.あなたはこの操作を行う必要があります。

        私たちはクラスのメンバを持っている場合は、それ自体は、クラスまたは構造体であるが、それは、このコンストラクタの引数の唯一のメンバー、ないデフォルトコンストラクタ()を持っています。このクラスの初期化のメンバーであるために、この時間は、それは初期化リストが存在しない場合は、その後、彼は、それがエラーになります最初のステップを完了することができません、クラスメンバーのパラメータを持つコンストラクタを呼び出す必要があります。

 

       2クラスのメンバと、オブジェクトのconst修飾はCONST INT mの割り当てに、初期化されなければならない場合。彼らのために行うには、クラスのメンバは、constオブジェクトが含まれている、または引用符があるときに、2つのオブジェクトが文の直後に初期化するので、彼らは、メンバー初期化リストで初期化する必要がありますが、コンストラクタ内のとき割り当てが、これは許可されていません。

 

メンバ変数に提供(2)C ++初期化リストが初期化され、文法規則:

        

Constructor::Contructor() : m1(v1), m2(v1,v2), m3(v3)
{
    // some other assignment operation
}

 

(3)注意事項概念のこと

     初期化:初期オブジェクトが作成されます

     割り当て:オブジェクトはすでに存在して割り当てられ、

 

(4)対応するパラメータリストコンストラクタの初期化順序:

   配列に関連する初期化シーケンスと宣言メンバー変数は、関係なく、初期リストの順序の、コンストラクタ関数本体の前に実行のリストを初期化します。

 

コンストラクタ反対実行順序及び実行デストラクタ(5)

   

コードは次のようになり、真剣に出力を見てみましょう。

#include<iostream>
using namespace std;


class A
{
public:


	A(int _a)
	{
		a = _a;
		cout<<"构造函数"<<" a "<<a<<endl;
	}

	~A()
	{
		cout<<"析构函数"<<" a "<<a<<endl;
	}  
	void print()
	{
		cout << a << endl;
	}
	
protected:

private:
	int a;
};


//1 构造函数的初始化列表  解决: 在B类中 组合了一个 A类对象 (A类设计了构造函数)
//根据构造函数的调用规则 设计A的构造函数, 必须要用;没有机会初始化A
//新的语法  Constructor::Contructor() : m1(v1), m2(v1,v2), m3(v3)
class B
{
public:
	B(int _b1, int _b2):a1(1),a2(2),c(0)
	{

	}

	B(int _b1, int _b2, int m, int n):a1(m), a2(n), c(0)
	{
		b1 = _b1;
		b2 = _b2;
		cout<<"B的构造函数"<<endl;
	}

	~B()  //c++中的析构函数,没有返回值,不允许加任何参数,故不能重载
	{
		cout << "B的析构函数" << endl;
	}
	
private:
	int b1;
	int b2;
	A a2;
	A a1;
	const int c;
};


//2 在初始化参数列表中,先执行初始化参数列表的构造函数,再执行下面构造函数的部分
//如果组合对象有多个,按照定义顺序,而不是按照初始化列表的顺序

//析构函数:和执行构造函数的顺序正好相反

//3 被组合对象的构造顺序,与定义顺序有关,与初始化列表的顺序没有关系
//4 初始化列表用来给const属性赋值

void obj10play()
{
	//A a1(10);
	//B objB(1,2);

	// 1 参数传递
	B objB2(1, 2, 3, 4);

	//2 调用顺序
}


int main(int argc, char* argv[])
{
	obj10play();
	system("pause");
}

/**
输出:
构造函数 a 4
构造函数 a 3
B的构造函数
B的构造函数
析构函数 a 3
析构函数 a 4
请按任意键继续....
*/

 

 

彼は199元記事に公開 ウォン称賛77 ビューに20万+を

おすすめ

転載: blog.csdn.net/tianguiyuyu/article/details/104023026