在《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 。因为该关键词只能出现在类内声明语句之前而不能用于类外部的函数定义。
原文链接: https://www.cnblogs.com/wuqi/p/4656409.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/219299
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!