标签:
在《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 。因为该关键词只能出现在类内声明语句之前而不能用于类外部的函数定义。
标签:
原文地址:http://www.cnblogs.com/wuqi/p/4656409.html