gpt4 book ai didi

c++ - 为什么在这段代码中调用虚方法时会出现段错误?

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

我还在学习 C++;我正在尝试多态性的工作原理,但在调用虚拟方法时遇到了段错误。

(注意:我没有将析构函数标记为虚拟,我只是想看看会发生什么。)这是代码:

#include <iostream>

using namespace std;

class Base
{
protected:
char *name;

public:
Base(char *name)
{
cout << name << ": Base class cons" << endl;
}

~Base()
{
cout << name << ": Base class des" << endl;
}

virtual void disp();
};

void Base::disp()
{
cout << name << ": Base disp()" << endl;
}

class Child : public Base
{
public:
Child(char *name):
Base(name)
{
cout << name << ": Child class cons" << endl;
}

~Child()
{
cout << name << ": Child class des" << endl;
}

virtual void disp()
{
cout << name << ": Child disp()" << endl;
}
};


int main()
{
//Base b;
//b.disp();
Base c = Child("2");
c.disp();
}

此外,对于了解 Java 中这些概念的人,如果您有关于继承和多态性的一般用法的任何其他提示,请告诉我。谢谢!

最佳答案

名称 - 在 Base 中未初始化

还有一个问题:

  Base c = Child("2");

我不认为这是你想要的。您的代码将从已转换的 Child 创建一个 Base 实例。但我认为您希望使用基于 Base 接口(interface)的 Child 实例;你应该改为写:

  Base *c = new Child("2");

另外,为了避免将来出现错误,请将 base 中的析构函数声明为虚拟的。

关于c++ - 为什么在这段代码中调用虚方法时会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/710607/

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