gpt4 book ai didi

c++ - 传递对基类指针的引用

转载 作者:搜寻专家 更新时间:2023-10-31 00:39:40 24 4
gpt4 key购买 nike

我有一个扩展 Base 的类 Child。在我的类 Foo 中,我有带有如下签名的方法:

void Foo::doStuff(Base *& base);    // case A
void Foo::doOther(Child *& child); // case B
void Foo::doSomething(Base * base); // case C

我对案例 B 没有任何问题。如果我写:

Child * myChild = new Child();
Foo foo;
foo.doOther(myChild);

没有编译/运行时错误。

问题出在案例A上,如果我这样写:

Child * test = new Child();
Foo foo;
foo.doStuff(test);

我收到一条编译时错误消息:

error: no matching function for call to foo::doStuff...

如果我不使用对指针的引用(case C),则没有问题

在调用 doStuff 之前,我还尝试将测试对象转换为 Base *& 对象,但我想让它像 一样工作情况 C

有什么想法吗?

编辑:

它是:Child * myChild = new Child();//不是 Base * myChild = new Child();

最佳答案

如果这样

Child * test = new Child();
Foo foo;
foo.doStuff(test);

将被允许,doStuff 是这样实现的:

Foo::doStuff(Base *& base)
{
delete base;
base = new Base();
}

那么你最终会得到一个静态类型为 Child * 但实际上指向 Base 的指针。

这个

Child * test = new Child();
Foo foo;
foo.doSomething(test);

不是问题,因为doSomething不能修改test

关于c++ - 传递对基类指针的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15928901/

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