可以有,但是没必要这样做,好得设计不会这样设计的。这只是概念问题。知道可以就可以了
1L说的不确切。纯虚函数添加函数体,依旧为纯虚函数,类依旧是抽象类,不能实例化
2L说的很明确,既然纯虚函数所在的类为抽象,那么为纯虚函数添加函数体是完全没有必要的。可以有函数体,但是这不是一种好得设计方式。既然是公共接口,添加函数体多此一举。
***下面是我暂时想到的,不知道我的理解是否正确***
*** 如果学习C++ 的话,不防看看《C++ 编程思想》两卷 ***
为什么要引入纯虚函数?如果它有了函数体,那它还是纯虚函数吗?
1) 含有纯虚函数的类叫做抽象类,抽象类从概念上理解,就是不能实例化对象。
如 对于下面的类来说,
class AbstractC
{
public:
virtual void get()=0;
};
当声明一个AbstractC objAb; 时就会报error。
但从implementation 实现来理解,抽象类对象可以作为一个占位符(只能使用指针或引用)
void globalFun( AbstractC *inputObj);
即任何实现了AbstractC的类都是可以作为globalFun的参数。(这里是pubblic inheritation, 但不能引入新的函数,除非做类型转换)。
2) 如果它有了函数体,即如下:
class AbstractC
{
public:
virtual void get()=0;
virtual void put() {}
};
因为任何包含纯虚函数的类都是抽象类,即AbstractC不能声明对象,不能实例化对象。那么这个类的成员函数的函数体能做什么??所以,加个函数体,就是非常非常不必要了。
因此,纯虚函数是为了定义抽象类(如AbstractC),抽象类可以作为公共接口(如globalFun)来使用。
纯虚函数也可以有函数体,提供缺省行为;继承类继承该虚函数接口的时候,可以明确提出使用基类的纯虚函数指定的缺省行为
不能有,有了就不叫纯虚了。