首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++继承虚函数

c++继承虚函数
EN

Stack Overflow用户
提问于 2014-01-08 06:29:59
回答 4查看 122关注 0票数 1

我正在尝试学习c++中的继承。我写了一些代码来学习虚函数。

代码语言:javascript
复制
#include <iostream>

using namespace std;

class A {
  int a;

  public:
    A() {}
    virtual int get_count() const = 0;
    int get_A() { return a; }
};

class B : public  A{
  public:
    int b;

    B() {}

    B(A& base)
      : b(base.get_count()) {}

    virtual int get_count() const { return 10; }
};

void func(A& base) {
  B derived(base);
  cout << derived.b;
}

int main() {
  A base;
  B derived;

  func(derived);
}

当我尝试编译时,我得到了这个错误:

代码语言:javascript
复制
test_inheritance_vir.cpp: In function ‘int main()’:
test_inheritance_vir.cpp:32: error: cannot declare variable ‘base’ to be of abstract type ‘A’
test_inheritance_vir.cpp:5: note:   because the following virtual functions are pure within ‘A’:
test_inheritance_vir.cpp:10: note:  virtual int A::get_count() const

你能告诉我我哪里做错了吗?

EN

回答 4

Stack Overflow用户

发布于 2014-01-08 06:32:39

您正在尝试使用A base;实例化一个类型为A的对象。这是不可能的,因为A包含一个纯虚函数。(get_count())假设我尝试调用base.get_count()

票数 4
EN

Stack Overflow用户

发布于 2014-01-08 06:33:54

方法virtual int get_count() const = 0;纯虚拟。你不能创建一个抽象类的对象(或者换句话说--有一个纯虚拟成员)。如果要创建A的对象,请删除定义函数的= 0(如果需要,可以使用空体):

代码语言:javascript
复制
virtual int get_count() const{};

应该行得通。

票数 1
EN

Stack Overflow用户

发布于 2014-01-08 06:35:44

您实现A (如下所示)的方式使其成为一个抽象基类。

代码语言:javascript
复制
class A 
{
  int a;

  public:
    A() {}
    virtual int get_count() const = 0; // this is a pure virtual function
    int get_A() { return a; }
};

它只能用作指向实现纯虚函数的派生类的指针:

代码语言:javascript
复制
int main() 
{
    B derived;
    A* pA = new B; // this is okay

    delete pA;
    return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20983311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档