首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >纯虚函数及其实现

纯虚函数及其实现
EN

Stack Overflow用户
提问于 2010-01-19 04:45:43
回答 5查看 94K关注 0票数 196

我的基本理解是,没有纯虚函数的实现,然而,我被告知可能有纯虚函数的实现。

代码语言:javascript
复制
class A {
public:
    virtual void f() = 0;
};

void A::f() {
    cout<<"Test"<<endl;
}

上面的代码可以吗?

让它成为一个带有实现的纯虚函数的目的是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-01-19 05:00:13

virtual函数必须在将被直接实例化的派生类型中实现,但是基类型仍然可以定义实现。派生类可以通过使用完全限定作用域的名称(在示例中调用A::f() -如果A::f()publicprotected)显式地调用基类实现(如果访问权限允许)。类似于:

代码语言:javascript
复制
class B : public A {

    virtual void f() {
        // class B doesn't have anything special to do for f()
        //  so we'll call A's

        // note that A's declaration of f() would have to be public 
        //  or protected to avoid a compile time problem

        A::f();
    }

};

我能想到的用例是,有一个或多或少合理的默认行为,但类设计者只希望这种默认行为被显式调用。也可能是这样,您希望派生类始终执行自己的工作,但也能够调用一组公共功能。

请注意,尽管该语言允许这样做,但我认为它并不常用(而且它可以做到这一点似乎让大多数C++程序员感到惊讶,即使是有经验的程序员也是如此)。

票数 234
EN

Stack Overflow用户

发布于 2010-01-19 04:49:32

它的优点是,它强制派生类型仍然覆盖该方法,但还提供了默认或附加实现。

票数 20
EN

Stack Overflow用户

发布于 2010-01-19 05:24:23

你必须给一个纯虚拟析构函数一个实体,例如:)

阅读:http://cplusplus.co.il/2009/08/22/pure-virtual-destructor/

(Link broken, use archive)

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

https://stackoverflow.com/questions/2089083

复制
相关文章

相似问题

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