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 。因为该关键词只能出现在类内声明语句之前而不能用于类外部的函数定义。

  • 相关阅读:
    truncate table
    SSIS学习笔记
    Bing Developer Assistant开发随记
    数组中的逆序对
    第一个只出现一次的字符
    丑数
    把数组排成最小的数
    连续子数组的最大和
    最小的k个数
    数组中出现次数超过一半的数字
  • 原文地址:https://www.cnblogs.com/wuqi/p/4656409.html
Copyright © 2011-2022 走看看