2011-10-06 9 views
2

私はクラスのユーザー入力を取るためのプログラムを作成しています - 国 - そして最も密集した人口の多い国の面で最大の国を対象としています。しかし、私は実装ファイルを持っています。実装ファイルでコンストラクタを使用するには?

デフォルトのコンストラクタにはどうすればよいですか?他のコンストラクタはどうですか?あなただけのメンバーを初期化している。この場合

#include <iostream> 
#include <string> 

using namespace std; 

#include "COUNTRY_H" 

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

} 

Country :: Country(); 
{ 

} 

答えて

1

、(ほとんどの場合)、および初期化子リストを使用する:

#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 

との:これは私がこれまで持っているものです。

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

新しいコーダーの可読性を向上させるために、引数名がメンバー変数名と正確に一致しないように引数名を変更しました。コンパイラは、イニシャライザリスト内の同一の引数とメンバ名で混同されることはありません。

デフォルトのコンストラクタにはデフォルト値のみを持つ初期化子リストを含めることができます。 name("Transylvania"),area(5),population(42)ですが、意味のあるデフォルト値を考えるのが難しい場合は、デフォルトのコンストラクタを未定義のままにして、クラスを構築するために値が必要となるようにすることが有効です。

1

ここにはいくつかの問題があります。

  • あなたの実装が名前COUNTRY_Hを持つファイルが含まれて、私は、前提としたい任意の前にusing namespace句が決して#include "Country.h"
  • あるべき文を含め、これは本当に醜いバグ
  • あなたのために作ることができますコンストラクタは値によって、それの文字列パラメータを取りますが、それは(ある参照対のconst)const&デフォルトのctorのために

でそれを取る必要があります。それは、SENSへのクラスのすべてのメンバーを設定する必要がありますデフォルト値。それをスキップすると、デフォルトのコンストラクタが生成され、すべてのメンバーがデフォルトで構築されます。プリミティブ型(int、longなど)は初期状態が未定義であることに注意してください。また、コンストラクタを定義することによって、デフォルトのコンストラクタが生成されないようになります。初期化子リストを使用してクラスのメンバーを初期化します。コンストラクタの本体では行いません。