パラメータでのコンストラクタ(各オブジェクトは、異なる初期状態を有することができる)
コンストラクタをすることができる必要なパラメータとして定義され
たクラスの複数の存在し得るオーバーロードコンストラクタ
コンストラクタC ++過負荷の規則従うオーバーロード
クラスのテスト
{
パブリック:
テスト(V int型)
{
//初期化部材に使用V
}
}
ヒントは、
定義とオブジェクトの宣言異なるオブジェクト
オブジェクト定義- 宇宙アプリケーションオブジェクトをとコンストラクタ呼び出し、
オブジェクトの宣言を- そのようなオブジェクトが存在することをコンパイラに指示します
Tテスト; //定義オブジェクトとコンストラクタを呼び出します
メインINT()
{ // Tコンパイラ言う名前付きオブジェクトのテスト存在 EXTERNテストtは、 0を返します; }
自動のコンストラクタを呼び出す
クラスをテスト
{
公共:
試験(){}
テスト(V int型){}
}。
メインINT
{
テストT; //テスト()の呼び出し
テストT1; //テスト(V int型)の呼び出し(1)
試験T2 = 1; //テスト(V int型)を呼び出す。
戻り0;
}
テストT1の分析(1):
T1という名前のテストオブジェクトを定義します。即時括弧1の数がありますが、それは関数呼び出しのように見えます。実際には、コンパイラに伝えるために使用される
ことのパラメータで呼び出すコンストラクタのパラメータを持つコンストラクタを呼び出すために?今回は重い負荷の規則を使用する必要があります。
タイプ番号1はすぐにint型なので、我々はコンパイラのコンストラクタを伝えると呼ばれるように、それが唯一のパラメータであり、パラメータの型がintである。この場所ではテストがある(INT V)
1 #include <stdio.h>
2
3 class Test
4 {
5 public:
6 Test()
7 {
8 printf("Test()\n");
9 }
10 Test(int v)
11 {
12 printf("Test(int v), v = %d\n", v);
13 }
14 };
15
16 int main()
17 {
18 Test t; // 调用 Test()
19 Test t1(1); // 调用 Test(int v)
20 Test t2 = 2; // 调用 Test(int v)
21
22 int i(100); //用100来初始化i。相当于int i =100;
23
24 printf("i = %d\n", i);
25
26 return 0;
27 }
注意:
Test t2 = 2; //用2来初始化t2
int i = 1; //用1对变量就进行初始化
i = 2; //用2对变量i进行赋值
以前在学习C语言时,初始化和赋值好像没有什么差别,于是就将赋值和初始化混淆了。
在C语言中,两者貌似差距很小。但是在C++中,两者之间的差异很大。原因是初始化会调用构造函数。
一定要记住,初始化会调用构造函数,赋值时调用的就不是构造函数了。赋值的时候究竟发生了什么?以后再说。