私はここで不条理なことを尋ねているかもしれませんが(そして私はC++で新しくなっています)、それでもやってみたいと思います。オブジェクトを受け取る関数でクラスのメソッドにアクセスしようとしていますが、同時にクラスを指定する必要がないため、テンプレートを使用しています。これは信じられないほど愚かに聞こえるが、とにかく、それはコードです:テンプレートを使ってクラスの関数を呼び出す
class Dog;
class Animals{
public:
// initializes all protected variables
Animals(string fam, string gen, string espec, string subespec);
~Animals();
template <class A>
void Eat(A &);
protected:
string family;
string genre;
string especies;
string subespecies;
};
template <class A>
void Animals::Eat(A &obj)
{
// this is where I don't know what I could do.
std::cout << obj.methodOfA();
}
/---
int main()
{
Dog *myDog = new Dog;
myDog->Eat(myDog);
//supposing I had class "Cats"
Cat *myCat = new Cat;
myCat->Eat(myCat);
}
これは非常に愚かなことなので、答えに私の愚かさを指摘して自由に感じるかもしれません...誰かがこれに答えるならば。 私はこれが欲しかったのは、Animalsクラスから派生した多くのクラスを持ち、これらのクラスのどれとも無関係に、このメソッドを適切に使用できるようにしたかったからです。
ありがとうございました。
あなたは「クラスの動物の派生している多くのクラスを持っている」とあなたは「彼らはこの方法を使用できるようにしたかった」場合は、このメソッドをしたいように、私に聞こえます純粋な仮想メソッドであり、それは各派生クラスで実装されています。これが仮想メソッドの目的です。 –
Ooooh、ok、ありがとう!あなたの答えを決定的なものにする方法がありますか?再度ありがとう – Barbaroto
いいえ、それは単なるコメントです。あなたは単にそれをupvoteすることができます。それは本当に多くはしませんが、それは問題ありません。 –