2015-02-12 69 views
-2

我需要清楚,明確調用超類構造函數/方法的最佳方法。調用超類構造函數或方法的最佳方式是?

我試着用這兩個方法如下調用父類的構造:

Myclass::Myclass(int a, int b):X(a),Y(b) 
{ 
    // do something 
} 

Myclass::Myclass(int a, int b) 
{ 
X = a; 
Y = b; 
} 

所以我在這裏的問題是:

  1. 這是最好的方式調用超類構造函數/方法顯式?
  2. 這兩種方式都有哪些好處?
  3. 什麼是最佳實踐,爲什麼?
  4. 這兩種方式都存在性能問題嗎?

關於我的問題,我發現這個鏈接: What are the rules for calling the superclass constructor?但我仍然有一點疑問,就是我上面問。

如果有任何在線教程,博客或視頻也可以在這裏提到,這將對我有很大的幫助。預先感謝.....

+3

第二一個人不會做你認爲的事。 (如果'X'和'Y'沒有默認的構造函數,它甚至不應該*編譯*)。編輯:現在它只會在X和Y是成員變量的情況下編譯。 – WhozCraig 2015-02-12 08:57:20

+2

你連接的問題不清楚的方式是什麼? – Rerito 2015-02-12 08:57:39

+0

@WhozCraig或者有一個非顯式構造函數接受int – Rerito 2015-02-12 09:01:48

回答

4

的唯一正確的方法來調用父類的構造函數是初始化列表:

Myclass::Myclass(int a, int b) 
    :X(a),Y(b) 
{} 

其實另一種方式調用不同的構造函數:

Myclass::Myclass(int a, int b) 
    // implicit :X(),Y() 
{ 
    // These two don't call constructors but actually declare variables 
    X(a); 
    Y(b); 
} 
+3

第二個只調用構造函數一次; 'X(a);'和'Y(b);'是變量的聲明 – 2015-02-12 09:03:11

+0

你是對的。我已經糾正了答案。 – StenSoft 2015-02-12 09:31:57

相關問題