0
の機能に派生クラスを渡す:私はこのコードを持って、基本クラスの引数
#include <iostream>
class Base {
public:
virtual void sayHello() {
std::cout << "Hello world, I am Base" << std::endl;
}
};
class Derived: public Base {
public:
void sayHello() {
std::cout << "Hello world, I am Derived" << std::endl;
}
};
void testPointer(Base *obj) {
obj->sayHello();
}
void testReference(Base &obj) {
obj.sayHello();
}
void testObject(Base obj) {
obj.sayHello();
}
int main() {
{
std::cout << "Testing with pointer argument: ";
Derived *derived = new Derived;
testPointer(derived);
}
{
std::cout << "Testing with reference argument: ";
Derived derived;
testReference(derived);
}
{
std::cout << "Testing with object argument: ";
Derived derived;
testObject(derived);
}
}
出力は次のとおりです。
Testing with pointer argument: Hello world, I am Derived
Testing with reference argument: Hello world, I am Derived
Testing with object argument: Hello world, I am Base
私の質問は、ポインタケースvoid testPointer(Base *obj)
と基準ケース理由でもあるvoid testReference(Base &obj)
void sayHello()
の派生インスタンスの結果を返しますが、コピーケースによるパスは返しませんか?派生クラス関数void sayHello()
の結果を返すようにコピーケースを作成するにはどうすればよいですか?
「参照引数でテストする」は、「testReference」ではなく「testObject」を呼び出します。 –
[オブジェクトのスライシングとは何か?](https://stackoverflow.com/questions/274626/what-is-object-slicing) –
@RaymondChenそのおかげで、参照事例がポインタとして機能していることがわかりました。しかし、おそらく、派生クラス関数の実装を呼び出す方法はありません。 – Pekov