ベータ版530での配列リサイズの不具合 - ページ 8

 
angevoyageur:
果物(りんご、梨)の次は、猫、犬、動物。oopについて語られているときの想像力のなさはひどいものです。(cyclops993、あなたのことではなく、wikipediaのことです。) どの本当のプログラムが、メソッド "talk "を持つクラス "animal "を必要とするのでしょう。早速、「取引」の例を掲載します。

やや完成度の高いサンプルスクリプト。

class Animal {
    public: virtual string talk() {return "";}
};
 
class Cat : public Animal {
    public: string talk() {return "Meow!";}
};
 

class Dog : public Animal {
    public: string talk() {return "Woof!";}
};

void OnStart()
{
   Animal * random;
   if (GetTickCount() % 2 == 0) {
      random = new Cat();
   } else {
      random = new Dog();
   }
   MessageBox(random.talk());  
   delete random;
}

今まで気づかなかったのは、基底クラスへの参照がある場合、ボディを持たない仮想関数を 持つことはできないようです。上の例では、次のようなことができない。

class Animal {
   public: virtual string talk();
};

...一方、C++では以下のようなことができます

class Animal {
    public: virtual const char * talk() = 0; // Pure virtual function
};
 
class Cat : public Animal {
    public: const char *  talk() {return "Meow!";}
};
 

class Dog : public Animal {
    public: const char * talk() {return "Woof!";}
};

void main()
{
   Animal * random;
   if (GetTickCount() % 2 == 0) {
      random = new Cat();
   } else {
      random = new Dog();
   }
   printf(random->talk());   
}
 
SDC:

クラス cat とクラス dog は動物のサブクラスですか? dog クラスに別のサブクラスを作成し、クラス pitbull と呼ぶことは可能ですか?

はい、その通りです。そして、これらのクラスを使用する場合、変数を使用し、あるクラスとそのサブクラスの任意のオブジェクトに影響を与える。cyclops993の例(main関数)にあるように、talk()を呼び出すと、good関数が使われる。
 

なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど。

 
SDC:

なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど、なるほど。

例えば

class Pitbull : public Dog {
   public: 
      string talk() {return "Growl!";}
      void menace() {}
};

...ピットブルは猫や他の犬のように話せるだけでなく、物事を威嚇することができます。