2013-02-01 227 views
2
#include <vector> 

class A { 
private: 
    std::vector<int> v_; 
public: 
    A(int size = 100, int init_val = 100){ 
     for(int i=0; i<size; i++) 
      v_.push_back(init_val); 
    } 
}; 

在主,如果我這樣做:默認的構造函數的參數

A a(1000, 100); 

真正發生的?這是我第一次在構造函數中看到硬編碼參數!

+0

我建議將問題的標題更改爲「構造函數參數的默認值」(以及相應的內容)。 – Spook

回答

6

傳遞的值將簡單地替換傳遞的參數的默認值。

  • 的定義A a;將導致調用A::A(100, 100)
  • 的定義A a(5);將導致調用A::A(5, 100)
  • 的定義A a(5, 6);將導致調用A::A(5, 6)
4

這些不是「硬編碼」,只是默認參數。如果不提供參數,則size默認爲100,而init_val爲100. 做的參數提供覆蓋默認值。因此:

A a1();   // size = 100, init_val = 100 
A a2(1000);  // size = 1000, init_val = 100 
A a3(1000, 1000); // size = 1000, init_val = 1000 
1

聲明

A(int size = 100, int init_val = 100) 

未定義「硬編碼參數」,而是默認值值。如果您呼叫A::A()將這些參數留下,編譯器將使用默認值。這裏的所有都是它的。