Cpp的Virtual函数不能只声明不定义

本文探讨了C++中虚函数的声明与定义规则,特别是在未定义情况下编译器的行为差异。通过两个实例对比了仅声明与同时定义虚函数的不同结果。

在《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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值