zoukankan      html  css  js  c++  java
  • Cpp的Virtual函数不能只声明不定义

    在《C++ Prime 中文版 第五版》的451页提到:

    声明但是不定义一个成员函数是合法的,对此只有一个例外,我们将在15.2.1节(528页)介绍。

    翻到528页,是介绍虚函数的地方。针对于此,使用VS2010编译环境进行验证。

    代码1:声明但是不定义virtual函数

    #include <iostream>
    using namespace std;
    
    class Quote{
    public :
        virtual  double net_price(std::size_t n)const; 
    
    };
    //virtual  double Quote::net_price(std::size_t n)const 类声明外部的说明符无效
    //double Quote::net_price(std::size_t n)const
    //{
    //
    //    return 0.0;
    //
    //}
    int main()
    {
    
        Quote quote;
    
        cout <<"Test 4 Virtual"<<endl;
    
        return 0;
    
    }

    报错:

    1>ClCompile:
    1> Test4Virtual.cpp
    1>Test4Virtual.obj : error LNK2001: 无法解析的外部符号 "public: virtual double __thiscall Quote::net_price(unsigned int)const " (?net_price@Quote@@UBENI@Z)

    代码2:

    #include <iostream>
    using namespace std;
    
    class Quote{
    public :
        virtual  double net_price(std::size_t n)const; 
    
    };
    //virtual  double Quote::net_price(std::size_t n)const 类声明外部的说明符无效
    double Quote::net_price(std::size_t n)const
    {
    
        return 0.0;
    
    }
    int main()
    {
    
        Quote quote;
    
        cout <<"Test 4 Virtual"<<endl;
    
        return 0;
    
    }

    编译通过,正常运行。这里提一下:在类外定义的地方,不能使用Virtual 。因为该关键词只能出现在类内声明语句之前而不能用于类外部的函数定义。

  • 相关阅读:
    SQL Server 使用日志传送
    SQL Server 2008 R2 主从数据库同步
    JavaScript及C# URI编码详解
    sql server日期时间函数
    ASP.NET Core在Azure Kubernetes Service中的部署和管理
    [Nuget]Nuget命令行工具安装
    利用HttpListener创建简单的HTTP服务
    短链接实现
    [ubuntu]中文用户目录路径改英文
    [ubuntu]deb软件源
  • 原文地址:https://www.cnblogs.com/wuqi/p/4656409.html
Copyright © 2011-2022 走看看