c++ - 実装ファイルでコンストラクタを使用するにはどうすればよいですか?

原文 c++ class implementation

私は、クラス-国-のユーザー入力を受け取り、面積の点で最大の国と最も人口の多い国を計算するプログラムを書いています。ただし、実装ファイルは持っています。

デフォルトのコンストラクタには何を入れるべきですか?他のコンストラクタはどうですか?これは私がこれまでに持っているものです:

#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();
{

}
答え
この場合(ほとんどの場合)はメンバーを初期化するだけであり、初期化リストを使用します。

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


新しいコーダーの読みやすさを向上させるために、引数名を変更して、メンバー変数名と正確に一致しないようにしました。コンパイラーは、初期化リスト内の同じ引数とメンバー名によって混乱することはありません。

デフォルトのコンストラクタには、デフォルト値のみを含むイニシャライザリストを含めることができます。 name("Transylvania"),area(5),population(42)ですが、意味のあるデフォルト値を考えるのが難しい場合は、デフォルトのコンストラクターを未定義のままにして、クラスを構築するために値が必要になるようにすることは有効です。
関連記事

c++ - cursesライブラリーの使用時にmove()またはwmove()を使用するとカーソルが移動しない

c++ - プログラムでシステム情報を開く

c++ - Boost::Spiritを使用してエスケープされた文字列を解析する

java - 乱数をテストする[終了]

c++ - Qt CreatorとGCC

c++ - DLLが機能しない

c++ - Win32のアニメーションとイベントの質問(C++)

c++ - SWIGでSFMLクロスプラットフォームのtypedefを取得する

c++ - Webブラウザーを介してカメラから取得した画像を取得するにはどうすればよいですか?

c++ - Qt:カスタムウィジェットの画像リソースを適切に保存する