gpt4 book ai didi

c++ - 前向声明和 typeid

转载 作者:搜寻专家 更新时间:2023-10-31 01:23:10 32 4
gpt4 key购买 nike

我想根据子类 B 的类型检查父类(super class) A 的类型(使用父类(super class) A 中的方法,这样 B 就会继承它)。

这是我认为成功的方法(即使用前向声明):

#include <iostream>
#include <typeinfo>

using namespace std;

class B;

class A {
public:
int i_;
void Check () {
if (typeid (*this) == typeid (B))
cout << "True: Same type as B." << endl;
else
cout << "False: Not the same type as B." << endl;
}
};

class B : public A {
public:
double d_;
};


int main () {

A a;
B b;

a.Check (); // should be false
b.Check (); // should be true

return 0;
}

但是这段代码无法编译。我得到的错误是:

main.cc: In member function ‘void A::Check()’:
main.cc:12: error: invalid use of incomplete type ‘struct B’
main.cc:6: error: forward declaration of ‘struct B’

我该如何解决这个问题?

最佳答案

我认为你试图解决的问题用虚拟方法处理得更好:

class A
{
public:
virtual bool Check() { return false; };
}


class B : public A
{
public:
// override A::Check()
virtual bool Check() { return true; };
}

基类 A 中的方法不需要知道对象“真的”是 A 还是 B。这违反了基本的面向对象设计原则。如果当对象是 B 时行为需要改变,那么该行为应该在 B 中定义并由虚方法调用处理。

关于c++ - 前向声明和 typeid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1915759/

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