いくつかのプロダクションコードで作業していますが、そのうちのいくつかは安全に変更できません。私の問題は、特定のメソッドを使用したいと思います。パラメータの1つはクラスへのポインタです。しかし、パラメータとしてのクラスは私が望むことをしません。継承:親ポインタから継承したメソッドを使用する
私はそのクラスのサブクラスを書き、上記の関数を呼び出そうとしていますが、それでも親クラスのメソッドを使用しています。
私は以下MWEがあります。これに出力を実行している上記の例では
#include <iostream>
class Parent
{
public:
Parent() {};
void method() {std::cout<<"in Parent\n";}
};
class Child : public Parent
{
public:
Child() {};
void method() {std::cout<<"in Child\n";}
};
void secondMethod(Parent* Pptr)
{
Pptr->method();
}
int main()
{
Child c = Child();
Parent* parentPtr = &c;
c.method();
parentPtr->method();
secondMethod(parentPtr);
secondMethod(&c);
return 0;
}
はもちろんです:
in Child
in Parent
in Parent
in Parent
私は問題がスライスされたと考えていますか?基本的には、親クラスのポインタにキャストしているので、親クラスと見なされます。
親クラスでメソッドを仮想化することでこれを回避する方法がいくつか見受けられましたが、そのオプションはありません。
secondMethodを実際に使用する方法はありますか?特に、ParentクラスまたはsecondMethodを変更することなく