gpt4 book ai didi

C++ 无法将派生类转换为基类

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:22:35 25 4
gpt4 key购买 nike

我有一个非常简单的基类/派生类场景:

#include <tchar.h>
#include <stdio.h>
#include <iostream.h>
#include <conio.h>

class BaseChannel{
private:
public:
virtual ~BaseChannel(){};
virtual void SayBoo( bool SelectAll)=0;
};

class gdbChannel: BaseChannel{
public:
void SayBoo(bool SelectAll) {if (SelectAll) cout<<"boo";}
};

class UsesChannel{
public:
BaseChannel * c;
};


int _tmain(int argc, _TCHAR* argv[])
{
gdbChannel gc;
UsesChannel uc;
// uc.c = &gc; //cannot convert gdbChannel* to BaseChannel*
uc.c = (BaseChannel*)&gc; // works
uc.c->SayBoo(true);
getch();
return 0;
}

我的初始实现(上面已注释掉)无法编译。谁能解释为什么?我觉得由于 gdbChannel 明确是 BaseChannel 的一个实例,因此不需要强制转换。

最佳答案

那是因为 gdbChannel 不使用 public 继承来派生自 BaseChannel(class 类型的默认值是 private)。

如果你想表达的是public inheritance,就这样写:

class gdbChannel : public BaseChannel{
// ^^^^^^
public:
void SayBoo(bool SelectAll) {if (SelectAll) cout<<"boo";}
};

关于C++ 无法将派生类转换为基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16306284/

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