2017-04-22 13 views
0

C++の新機能では、未使用の関数Initを使用したコードを使用しています。この未使用関数を持つ点は何ですか?

ヘッダファイル: "KFilter.h"

#include "Eigen/Dense" 
class KFilter { 
    public: 
    Eigen::VectorXd x_; 
    KFilter(); 
    virtual ~KFilter(); 
    void Init(Eigen::VectorXd &x_in); 
    void Predict(); 
} 

がCPPファイル:

#include "KFilter.h" 
using Eigen::MatrixXd; 
using Eigen::VectorXd; 
KFilter::KFilter() {} 
KFilter::~KFilter(){} 
void KFilter::Init(VectorXd &x_in) { 
    x_ = x_in; 
} 
void KFilter::Add_one() { 
    x_ += 1; 
} 

後半main.cppにで "KFilter.cpp" は、私は誰かがこのKFilterの一つのオブジェクトを使用してご覧くださいクラス。

KFilter ekf_; 
ekf_.x_ = VectorXd(4); 
ekf_.x_ < 1, 1, 1, 1; 
ekf_.Add_one(); 

私はそれがsetterとgetterのようなものだと思いますが、なぜInitですか?私はこの種の使用法をC++の教科書で見つけることができませんでした。または、ここで使用されているポインタのためですか?

+2

*はおそらくオブジェクトの初期化に使用するためのセッターです。ここで 'x_'メンバはpublicなので、代入も同様に動作します。確かに教科書のデザインではありません。 :-) –

+0

だから、ヘッダファイルとcppファイルの両方でInitを削除しても、コードは正しく動作します。 – Patrick

答えて

0

あなたが話しているinit関数は、コンストラクタです。たとえそれが言及されていなくても、すべてのクラスはコンストラクタを持ちます。この場合、空のコンストラクタを書く代わりに、Kfilter() = default;と書くか、まったく書き込まないことができます。

たとえば、デフォルトのコンストラクタブルでないメンバーがクラスに含まれている場合など、このデフォルトのコンストラクタを削除することができます。

Kfilter() = delete;と書くことで、このデフォルトのコンストラクタを削除することもできます。これにより、そのクラスはデフォルトのonstructibleにならないようになります。

関連する問題