2012-10-07 30 views
1

下面是我的.h文件中RGD:如何爲類私有初始化的默認值

#include <iostream> 
#include <string> 

using namespace std; 

class ClassTwo 
{ 
private: 
string sType; 
int x,y; 
public: 
void setSType(string); 
void setX(int); 
void setY(int); 

string getSType(); 
int getX(); 
int getY(); 
}; 

我想建造2構造函數。

哪個構造函數1將沒有參數,將所有int值初始化爲0,並將字符串初始化爲空字符串。

構造函數2將使用get方法獲取sType,x和y參數。

但我怎麼做到這一點。

ClassTwo() : sType(), x(), y() {} 

您可以選擇與初始化爲清楚更明確:

ClassTwo() : sType(""), x(0), y(0) {} 

你可以,我應該在我的cpp文件或.h文件中

+0

見【什麼是會員變量列表後面的冒號在一個構造函數好?](http://stackoverflow.com/questions/210616/what-is-the-member-variables-list-after-the-colon-in-a-constructor-good -for?lq = 1) –

回答

1

對於默認的構造函數代碼此也省略了字符串的初始化,其默認值爲""

對於第二構造,最好是沒有setter方法實現:

ClassTwo(const std::string& s, int x, int y) : sType(s), x(x), y(y) {} 

無論你在標題中實施或在.cpp是你。我認爲在頭文件中實現這樣簡單的構造函數沒有什麼不利之處。

我建議你使用數據成員的命名約定。諸如xy之類的名稱可能會導致代碼中的其他地方發生衝突。

1

標題用於定義。包括標題不必知道任何實現代碼(除非你使用模板,這是一個不同的故事...)

不管怎麼說,2層構造:

public: 
ClassTwo() : sType(""), x(0), y(0) {} 
ClassTwo(string _type) : sType(_type), x(0), y(0) {} 
+0

我應該在哪裏初始化這個構造函數?它是在.h文件還是.cpp文件中 – user1726440