2016-04-01 22 views
1

Arduino IDEで動作する実際のコードを見てC++を学びたいと思っています。C++関数プロトタイプが.hファイルのクラス定義で宣言されていますが、.cppで定義されていない関数

.cppファイルで定義されていない.hファイルのクラスで宣言された関数プロトタイプ(readSensor)を実行しました。

class BME280Class 
{ 
private: 
    uint16_t readSensor(uint8_t command); 

readSensor()関数は呼び出されませんでした。コンパイラは実行された実行可能ファイルをコンパイルして生成しました。

.hppファイルのプロトタイプは、.cppファイルで定義されておらず、コンパイラは呼び出されない限り気にしませんか?それはおそらく良い練習ではないでしょうか?

+0

関数の実装は、おそらくライブラリの最終バイナリにリンクされています。ライブラリは基本的にプリコンパイルされた.cppファイルです(もう少し複雑ですが、それがその本質です)。 – Steve

答えて

2

はい、プロトタイプを宣言し、定義しないことができます。

非常に良い例は、コピーコンストラクタと代入をプライベートと宣言してそれらを定義しないことによって、コピー可能ではないクラスを作成することです。これは良い習慣です。

class Foo { 
    private: 
    Foo(const Foo& other); // non construction-copyable - not defined 
    Foo& operator=(const Foo&); // non copyable - not defined 
}; 
+2

C++ 11では、意図をより明確にするために、 '= delete;'と書くことができます。 –

+1

少年を混乱させたくないし、ちょっと古いスクールだった –

関連する問題