【初心者歓迎】C/C++室 Ver.37【環境依存OK】 at TECH
[2ch|▼Menu]
171:デフォルトの名無しさん
07/05/14 22:28:25
>>168
class C : public B
{
public:
  A& geta()
  {
    static A a(0);
    return a;
  }
  //コンストラクタほか省略
};
このとき、こうされたらどうする?
C c;
B& b = c;
b.geta().ptr();
B型の式に対してgeta()を呼ぶとB&が返ってくることにしたら、
このb.geta()ではA型のインスタンスへの参照を返しているので型システムを侵すことになる。

だから暗黙的にやらないで、B内ではB&を返すgetaを明示的にオーバーライドしてやったほうがいい。
次のコードはC::getaでコンパイルエラーになる
struct A {virtual A& geta();};
struct B : A {virtual B& geta();};
struct C : B {virtual A& geta();};


次ページ
続きを表示
1を表示
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5020日前に更新/189 KB
担当:undef