※ ChatGPTを利用し、要約された質問です(原文:C++基底クラスに戻り値の異なる関数が宣言されている場合)
C++基底クラスの戻り値の異なる関数の宣言について
このQ&Aのポイント
C++の基底クラスに戻り値の異なる関数が宣言されている場合、エラーが発生することがあります。
関数の名前と引数が同じで戻り値だけが異なる場合はエラーが出るため、基底クラスの変更が不可能な場合はどのように回避するか悩むことがあります。
このエラーを回避するための方法としては、仮想関数のオーバーライドを行わない代わりに、新しい関数を追加することが一つの解決策となります。
C++基底クラスに戻り値の異なる関数が宣言されている場合
こんにちは。
質問させてください。
以下のようなコードがあったとします。
class Base1
{
public:
virtual int get()=0;
};
class Base2
{
public:
virtual float get()=0;
};
class Ex : public Base1, public Base2
{
public:
int get(){return 0;}
float get(){return 0.0f;}
};
void main()
{
}
このプログラムをコンパイルすると
「'Ex::get': オーバーライドする仮想関数の戻り値の型が異なり、'Base1::get' の covariant ではありません。」
というエラーが出てしまいます。
関数の名前と引数が同じで戻り値だけが異なる場合はエラーが出るのはわかるのですが、基底クラスのBase1、Base2は変更不可能だとするとどのように回避すればいいのでしょうか?
よろしくお願いします。
/*
WindowsXP Professional SP3
VisualStudio2005 AcademicEdition
*/
お礼
回答ありがとうございます。 上記の方法でコードを書いてみたところ、確かにコンパイルは通るのですが実態化することができませんでした。 しかし、 >>二つの抽象クラスを多重継承し、かつそれらの同名の純粋仮想関数をオーバーライドすることについて、オブジェクト指向的にどのような意味があるのか不明ですが という発言を受けて少し考えてみて、現在の自分の設計のしかたのまずいところが見つかった気がします。 ありがとうございました。