当前位置:  开发笔记 > 编程语言 > 正文

在此代码中调用虚方法时,为什么会出现分段错误?

如何解决《在此代码中调用虚方法时,为什么会出现分段错误?》经验,为你挑选了1个好方法。

我还在学习C++; 我正在尝试多态性如何工作,并在调用虚方法时遇到分段错误.

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

#include 

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中了解这些概念的人一般有关于继承和多态的使用的任何其他提示,请告诉我.谢谢!



1> bayda..:

name - 在Base中未初始化

你还有另一个问题:

  Base c = Child("2");

我不认为这是你想要的.您的代码将从已铸造的Child创建Base实例.但我认为您希望使用基于Base接口的Child实例; 你应该写:

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

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

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有