您的位置:首页 > 编程语言 > C语言/C++

C++ 纯虚函数

2015-12-24 23:25 666 查看
什么是虚函数?

那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。

虚函数声明如下:virtual ReturnType FunctionName(Parameter);

虚函数必须实现,如果不实现,编译器将报错,错误提示为:

error LNK****: unresolved external symbol "public: virtual void __thiscall

ClassName::virtualFunctionName(void)"

 

为什么要用纯虚函数?

在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。为了解决这个问题,方便使用类的多态性,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual
ReturnType Function()= 0;),则编译器要求在派生类中必须予以重写以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。

在什么情况下使用纯虚函数(pure vitrual function)?

 

1,当想在基类中抽象出一个方法,且该基类只做能被继承,而不能被实例化;

 

2,这个方法必须在派生类(derived class)中被实现;

 

   如果满足以上两点,可以考虑将该方法申明为pure virtual function.

eg

class Fuck
{
public:
Fuck():fuck_time(0),girlName("linzhiling") {}
virtual void fuck_show()=0 ;
protected:
unsigned fuck_time; // in minutes
private:
std::string girlName;
};

class FuckYou : public Fuck
{
public:
void fuck_show() { std::cout<<"fuck is so good!"<<std::endl; }

void fuck_high()
{
std::cout<<"we are fuck high"<<std::endl;
std::cout<<fuck_time<<std::endl;
// std::cout<<girlName<<std::endl; can't access private member of base class

}

};

//test code
int main()
{
std::cout<<"Test pure virtual function START"<<std::endl;
// Fuck f; //can't build object of Fuck which has a pure virtual member function

FuckYou f;
f.fuck_high();
f.fuck_show();

std::cout<<"Test pure virtual function END"<<std::endl;

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: