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

 

posted on 2015-07-18 11:02  依风152  阅读(1726)  评论(0编辑  收藏  举报