2011-10-06 48 views
2

我正在編寫一個計劃,旨在爲一個班級 - 國家 - 以及面積最大的國家以及人口最密集的國家提供用戶輸入。然而,我有執行文件。如何在實現文件中使用構造函數?

什麼應該進入我的默認構造函數?其他構造函數呢?這是我到目前爲止有:

#ifndef COUNTRY_H 
#define COUNTRY_H 
#include <string> 


class Country 
{ 
public: 


    Country(string name, double area, int population); 

    Country(); 

    string get_name() const; 

    double get_area()const; 

    int get_population()const; 

    double population_density(Country popDensity) const; 


    void largest_area(double a); 

    void largest_population(int p); 

    void most_dense(double d); 


private: 

    string name; 
    double area; 
    int population; 

}; 

#endif 

和:

#include <iostream> 
#include <string> 

using namespace std; 

#include "COUNTRY_H" 

Country :: Country(string name, double area, int population) 
{ 

} 

Country :: Country(); 
{ 

} 

回答

1

在這種情況下,(並且大多數情況下),你只初始化成員,並且要使用初始化列表。

Country: Country(string _name, double _area, int _population): name(_name),area(_area),population(_population) 
{} 

爲了提高對新編碼的可讀性,使他們不完全匹配的成員變量的名字我已經改變了參數名。編譯器不會被初始化程序列表中的相同參數和成員名稱混淆。

您的默認構造函數可以包含一個僅具有默認值的初始化程序列表,例如, name("Transylvania"),area(5),population(42),但是如果很難想到有意義的默認值,那麼保持默認構造函數未定義以便該類需要值才能構建是有效的。

1

這裏有一堆東西是錯誤的。

  • 您的實現包括一個名爲COUNTRY_H一個文件,我會承擔包括應#include "Country.h"
  • 永遠有using namespace條款之前的任何包含語句,這可以使真正醜陋的錯誤
  • 您構造函數獲取它的字符串參數按值,但應該把它通過const&(參考給const是)

對於默認的構造函數:它應該在類的每一個成員設置爲SENS ible默認。如果跳過它,將會生成一個默認的構造函數,並默認構造每個成員,請記住原始類型(例如int,long)具有最初未定義的狀態。還記得定義任何構造函數會阻止生成默認的構造函數。使用初始化列表初始化類的成員,不要在構造函數的主體中執行它。

相關問題