继续昨天的问题,虚函数和纯虚函数在应用中的问题
我在基类中定义一个空虚函数和纯虚函数,再在基类下定义派生类,在实际的调用过程中有什么地方不同,或出错?
例:
class Virtualbase
{
public:
virtual void Demon(){}; //prue virtual function
或virtual void Demon()= 0;
virtual void Base() {cout<<"this is farther class";}
};
class SubVirtual :public Virtualbase
{
public:
void Demon() { cout<<" this is SubVirtual!";}
void Base() { cout<<"this is subclass Base!";}
};
可以用指针或对象来调,有什么区别,会不会出错?
问题点数:20、回复次数:9Top
1 楼lw1a2(一刀 现在改六点下班了:()回复于 2006-11-02 10:57:36 得分 0
昨天的揭帖了吗Top
2 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-11-02 10:59:18 得分 0
没什么区别,只是一个可以直接生成 Virtualbase 对象,一个不能Top
3 楼taodm((不能收CSDN社区短信息,请莫浪费精力))回复于 2006-11-02 11:00:50 得分 0
拜托楼主,能不能找本C++ Primer看看什么叫纯虚函数呀。
C++ Primer 3e P758明确写着呢Top
4 楼juqi777()回复于 2006-11-02 11:04:42 得分 0
再使用过程就不会不出错吗?能不能写点调用代码来说明下.我也知道你说的纯虚不能有对象,但要讲出两者在使用过程出的问题.但这是我们组长要求我们解决的.Top
5 楼lann64(昆仑大鹏@迦楼罗)回复于 2006-11-02 11:09:13 得分 10
给你段代码,去运行一下看看。
#include <iostream>
using namespace std;
class Virtualbase
{
public:
//virtual void Demon(){}; //prue virtual function
virtual void Demon()= 0;
virtual void Base() {cout<<"this is farther class"<<endl;}
};
class SubVirtual :public Virtualbase
{
public:
void Demon() { cout<<" this is SubVirtual!"<<endl;}
void Base() { cout<<"this is subclass Base!"<<endl;}
};
int main()
{
Virtualbase* a;
SubVirtual b;
a=&b;
a->Demon();
a->Base();
a->Virtualbase::Base();
b.Demon();
b.Base();
}Top
6 楼fflush(stdin)回复于 2006-11-02 11:12:02 得分 0
Virtualbase base;//如果是纯虚函数,这句会出现编译错误,如果不是,这句编译通过。
上面就是区别,其他的没有什么不同
再使用过程就不会不出错吗?能不能写点调用代码来说明下.我也知道你说的纯虚不能有对象,但要讲出两者在使用过程出的问题.但这是我们组长要求我们解决的.
-------------------------------------------------
你们那个组是干吗的。。。Top
7 楼anrui32(命令提示符(anrui32@163.com))回复于 2006-11-02 11:17:36 得分 10
纯虚函数在在派生类中实现以后,派生类才能INIT对象,否则派生类仍然是一个抽象类。
虚函数简单一句话就是,子类有调用子类,子类没调用父类。
因为子类的构造必须先构造鸡肋,当鸡肋INIT派生类的时候就会发生成员的COPY,所以鸡肋的THIS指针可以指向对象。Top
8 楼juqi777()回复于 2006-11-02 11:43:17 得分 0
做BREW的,现在没任务在复习C++的知识.Top
9 楼juqi777()回复于 2006-11-02 13:34:47 得分 0
对了哪有DesignPattern(设计模式C++版)哪里有下载?Top




