关于虚函数

啊呗虹 posted @ 2013年4月19日 16:56 in 未分类 , 1130 阅读

分析klee源码的时候,想输入每条路径符号执行的约束条件。因为搞不明白它expr里面的内容是什么东西,所以想先调用expr的print函数,编码的时候发现ExprPPrint是个抽象类,不能定义对象,于是百度了一下抽象类的知识,转过来学习下。

转自:http://carolhzj.blog.hexun.com/1155606_d.html

拿交通工具类的程序进行思考,由交通工具派生出来的汽车类,飞机类,是具备更具体特性的描述的类,而对于交通工具这一个基类来说,它的特性是模糊的,广泛的,如果建立一个交通工具类的对象并没有实际意义,为了对这种没有必要能够建立对象的类进行约束,c++引入了抽象类的特性,抽象类的约束控制来源于纯虚函数的定义

   声明一个类的成员函数为纯虚函数的意义在于让c++知道该函数并无意义,它的作用只是为派生类进行虚函数重载保留位置。

  纯虚函数的定义方法就是在类的成员函数的声明之后加上“=0”的标记,类中一旦有纯虚函数的定义那么这个类就再也不能创建此类的对象了,我们把这种类叫做抽象类。

抽象类的示例代码如下:


//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include <iostream>
using namespace std;

class Vehicle
{
public:
Vehicle(float speed,int total)
{
Vehicle::speed = speed;
Vehicle::total = total;
}
virtual void ShowMember()=0;//纯虚函数的定义
protected:
float speed;
int total;
};
class Car:public Vehicle
{
public:
Car(int aird,float speed,int total):Vehicle(speed,total)
{
Car::aird = aird;
}
virtual void ShowMember()//派生类成员函数重载
{
cout<<speed<<"|"<<total<<"|"<<aird<<endl;
}
protected:
int aird;
};

int main()
{
//Vehicle a(100,4);//错误,抽象类不能创建对象
Car b(250,150,4);
b.ShowMember();
system("pause");
}

 

Avatar_small
dexuter 说:
2013年4月19日 22:43

这个理解是错的,并不是class定义中有虚函数而这个class就必须就是abstract class,虚函数的出现是为了解决面向对象中的多态问题,c++就是麻烦,java中所有的成员都默认是virtual function,而pure virtual function 则是java中抽象类和接口定义的抽象方法

Avatar_small
啊呗虹 说:
2013年5月06日 16:53

@dexuter: 我菜鸟。。请多指教~回头我再看看书,很多年没看c++了,都忘了


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter