关于C 里面虚函数与纯虚函数的问题,刚接触C 对虚函数和纯虚函数不是很理解,求解答

[复制链接]
查看11 | 回复3 | 2011-9-5 08:05:30 | 显示全部楼层 |阅读模式
#includeiostreamusingnamespacestd;classShape{public:Shape(){};virtualintarrer()=0;virtualvoidshow()=0;};classCircle:publicShape{public:Circle(intr){radium=r;};virtualintarrer(){return3.14*radium*radium;};virtualvoidshow(){cout\"Circle:\"arrer()endl;};private:intradium;};classRetc:publicShape{public:Retc(intw,intl){weath=w,lenth=l;};virtualintarrer(){returnweath*lenth;};virtualvoidshow(){cout\"Retc:\"arrer()endl;};private:intweath,lenth;};intmain(){Shape*shapeptr;Circlec(9);Retcr(4,5);shapeptr=shapeptr-arrer();shapeptr-show();shapeptr=shapeptr-arrer();shapeptr-show();system(\"pause\");return0;}为什么把基类里面的2个纯虚函数virtualintarrer()=0;virtualvoidshow()=0;改为虚函数virtualintarrer();virtualvoidshow();就出错了。
回复

使用道具 举报

千问 | 2011-9-5 08:05:30 | 显示全部楼层
virtualintarrer()这种如果不声明成纯虚函数,那么就必须要有函数体的定义,当然你可以用空语句比如virtualintarrer()//用一对大括号就行了{}
回复

使用道具 举报

千问 | 2011-9-5 08:05:30 | 显示全部楼层
纯虚函数可以不实现,不是纯虚函数就必须实现它,即使是一个什么都不做的实现也可以追问最简单的改动方法是什么呢
回复

使用道具 举报

千问 | 2011-9-5 08:05:30 | 显示全部楼层
因为你把=0删除了后,他就不是纯虚函数了。不是纯虚函数就必须有定义了。这下明白了吗~!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行