2017-09-16 6 views
1

多分問題は簡単ですが、このようなことをするベストプラクティスは何ですか?クラスDataがあり、テキストファイルから情報を読み取る必要があるとします。コードの複製せずに、このような機能を実現する方法をC++の重複したコンストラクタとメソッドの機能

Data my_data; 
my_data.load("file.txt"); 

Data my_data("file.txt"); 

:1が等しい動作と、次のオプションの両方を持っている必要がありますか?

ありがとうございました。コンストラクタでloadメンバ関数を再利用することで

+2

コンストラクタのloadメソッドを呼び出すだけです。 –

+0

これは、使用しているものによって異なります。私はそれが最も一般的なシナリオであるため、あなたがまだ何かをロードしていなければ、 'Data'は役に立たないと仮定するつもりです。その場合、コンパイル時に初期化されていない使用エラーをキャッチするために、デフォルトのコンストラクタを提供しない方が安全です。それ以外の場合は、loadを呼び出すコンストラクタの回答が必要なものになります。 – patatahooligan

+0

ありがとうございました。負荷が定義され、コンストラクタの後に実装されている場合、私はなぜ理解できませんが、動作します。 – Denisof

答えて

0

避けコードの重複:

Data() { // Provide a default constructor 
} 
Data(const std::string& fileName) { 
    load(fileName); 
} 
void load(const std::string& fileName) { 
    ... // Load the file 
} 
0

あなたは(それがオーバーロードと呼ばれています)2つのコンストラクタを宣言することができます。

Data() 
{ 
} 

Data(string fileName) 
{ 
    load(fileName); 
} 

とあなただけのロード機能一度定義することができますより。

関連する問題