#include <iostream>
using namespace std;
class A
{
public:
A() : x(0) {}
// notice: not identical to const version but does update
void FA() {std::cout << "A" << std::endl; x++;}
void FA() const {std::cout << "const A" << std::endl;}
private:
int x;
};
class B
{
public:
B() : x(0) {}
// notice: not identical to const version but does update
void FB() {std::cout << "B" << std::endl; x++;}
void FB() const {std::cout << "const B" << std::endl;}
private:
int x;
};
class C
{
public:
void FC()
{
bool condition = true; // should be set to a real condition
if(condition)
{
a.FA();
}
b.FB();
}
void FC() const
{
bool condition = true; // should be set to a real condition
if(condition)
{
a.FA();
}
b.FB();
}
private:
A a;
B b;
};
int main() {
C c;
c.FC();
const C cc;
cc.FC();
return 0;
}
まず、長いタイトルを残して申し訳ありません。 関数内のクラスCでコードの重複を避ける方法FC、FC const? このからconstのキャスティングトリックを使用することはできず、非const FCの本体は実際には更新を行う関数を呼び出すため、const FCバージョンを非const FCバージョンから呼び出すことはできません定数。意味的に同一でない構文的に同一のconst関数と非const関数の間のコードの重複を回避する方法
:この例では、それは後に修正し、進化へのクラス
C
がより容易になるだろう彼らは両方を呼び出すことができます。 –「すべての」機能に同じ名前が選択されているため、見かけ上のコードの重複があります。 'Print()const'と' FA'の代わりに 'PrintAndUpdate()'があれば、その複製は魔法のように消えてしまいます。 –
これは質問には答えませんが、余分なものが必要な場合を除き、 'std :: endl'を使用しないでください。 '' \ n ''は行を終わらせます。 –