gpt4 book ai didi

c++ - 调用基类方法而不是派生方法,即使通过引用传递也是如此

转载 作者:太空狗 更新时间:2023-10-29 20:02:40 25 4
gpt4 key购买 nike

<分区>

我有 3 个类(class):A , B , 和 AnotherClass .在哪里B源自 A :

class A {
public:
A(){}
virtual void method() {//default action}
};

然后我有一个派生类,B:

class B : public A {
public:
B(){}
void method() {//redefine action}
};

AnotherClass :

class AnotherClass {
public:
AnotherClass(A& a);
A a;
anotherMethod(){ a.method()}
};
AnotherClass :: AnotherClass(A& a) : a(a) //initialization

所以,如果我构造一个 AnotherClass 的对象对象为 B :

B b();
AnotherClass myObj(b);

请记住,因为 B继承自 A , 和 AnotherClass接受 A 的对象,我能够成功传递 B对象作为参数。

然后我打电话:

myObj.anotherMethod();

我希望它执行 anotherMethod() ,当它发生时,我希望它调用 REDEFINED method()属于 B ,而是调用默认的 method()A 中定义

我在想我的问题是因为我指定了 AnotherClass 的参数作为 class A 的对象.但是,我不想将此参数更改为 class B 的对象。因为我也有课C , D , 和 E , 也直接继承自 A .所以我想使用基类作为参数类型所以我不限于只能传入 b目的。但是,我在该站点上阅读了一些较旧的帖子,大多数建议的解决方案是通过引用传递派生对象 ( b ),我正在这样做。

谁能解释为什么会这样?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com