虚函数和纯虚函数的两个基础小问题
纯虚函数就是“强制”要求在派生出具体类的时候必须定义出的函数,否则该派生类就无法定义具体对象而虚函数则可重新定义也可以不重新定义而仅仅站在使用的角度去说,虚函数和纯虚函数...
纯虚函数就是“强制”要求在派生出具体类的时候 必须定义出的函数,否则该派生类就无法定义具体对象 而虚函数则可重新定义也可以不重新定义
而仅仅站在使用的角度去说,虚函数和纯虚函数都可以实现多态的功能
请问我上面这几句话对吗??
派生类如果继承了抽象基类中的纯虚函数,而在该派生类中没有对此纯虚函数进行定义 则该派生类扔为抽象类 不能用它实体定义对象
我的问题是:该派生类继承过来的纯虚函数在这个派生类中扔然为纯虚函数么??????
书上说不是...除非重新声明成纯虚函数...那是什么?虚函数??我又没有在这个派生类中具体定义继承过来的这个纯虚函数 为什么就不是纯虚函数了呢???? 展开
而仅仅站在使用的角度去说,虚函数和纯虚函数都可以实现多态的功能
请问我上面这几句话对吗??
派生类如果继承了抽象基类中的纯虚函数,而在该派生类中没有对此纯虚函数进行定义 则该派生类扔为抽象类 不能用它实体定义对象
我的问题是:该派生类继承过来的纯虚函数在这个派生类中扔然为纯虚函数么??????
书上说不是...除非重新声明成纯虚函数...那是什么?虚函数??我又没有在这个派生类中具体定义继承过来的这个纯虚函数 为什么就不是纯虚函数了呢???? 展开
3个回答
展开全部
纯虚函数就是“强制”要求在派生出具体类的时候 必须定义出的函数,否则该派生类就无法定义具体对象 而虚函数则可重新定义也可以不重新定义
--说得对。
而仅仅站在使用的角度去说,虚函数和纯虚函数都可以实现多态的功能。
--说得对。
派生类如果继承了抽象基类中的纯虚函数,而在该派生类中没有对此纯虚函数进行定义 则该派生类扔为抽象类 不能用它实体定义对象
--说得对。
我的问题是:该派生类继承过来的纯虚函数在这个派生类中扔然为纯虚函数么??????
--说得对。
书上说不是...除非重新声明成纯虚函数...那是什么?虚函数??我又没有在这个派生类中具体定义继承过来的这个纯虚函数 为什么就不是纯虚函数了呢????
--其实,如果你不打算在某个派生类里实现基类的纯虚函数,那你最好连声明都别声明。如果声明了,那就加上=0。
如果不声明=0,编译器会将它视为非纯虚函数。
例如,基类Base有纯虚方法void Fun()=0
class C1: public Base
{
public: void Fun(); // 不写=0,也不写实现。
}
class C2: public C1
{
public: void Fun(){return;} //有实现了
}
这时你将无法实例化C2,因为C1的非纯虚函数没有实现,将产生连接错误。
Base *p = new C2;
C1 *p1 = new C2;
C2 *p2 = new C2;
这些都无法连接成功。
--说得对。
而仅仅站在使用的角度去说,虚函数和纯虚函数都可以实现多态的功能。
--说得对。
派生类如果继承了抽象基类中的纯虚函数,而在该派生类中没有对此纯虚函数进行定义 则该派生类扔为抽象类 不能用它实体定义对象
--说得对。
我的问题是:该派生类继承过来的纯虚函数在这个派生类中扔然为纯虚函数么??????
--说得对。
书上说不是...除非重新声明成纯虚函数...那是什么?虚函数??我又没有在这个派生类中具体定义继承过来的这个纯虚函数 为什么就不是纯虚函数了呢????
--其实,如果你不打算在某个派生类里实现基类的纯虚函数,那你最好连声明都别声明。如果声明了,那就加上=0。
如果不声明=0,编译器会将它视为非纯虚函数。
例如,基类Base有纯虚方法void Fun()=0
class C1: public Base
{
public: void Fun(); // 不写=0,也不写实现。
}
class C2: public C1
{
public: void Fun(){return;} //有实现了
}
这时你将无法实例化C2,因为C1的非纯虚函数没有实现,将产生连接错误。
Base *p = new C2;
C1 *p1 = new C2;
C2 *p2 = new C2;
这些都无法连接成功。
展开全部
同意 冰火梦幻 的看法。
当在父类里声明一个函数为虚函数后,那么你实例化一个对象后,如果调用这个函数的话,如果你在子类中定义了这个函数(不需加virtual)的话,那么就调用子类中的函数,父类中的就不调用了。 如果没有定义,就调用父类的函数。
定义了纯虚函数的类成为抽象类,该纯虚函数必须被赋值为0。
该抽象类无法实例化对象,仅该类的子类可以实例化对象,并且抽象类中的纯虚函数必须在子类中有定义。
当在父类里声明一个函数为虚函数后,那么你实例化一个对象后,如果调用这个函数的话,如果你在子类中定义了这个函数(不需加virtual)的话,那么就调用子类中的函数,父类中的就不调用了。 如果没有定义,就调用父类的函数。
定义了纯虚函数的类成为抽象类,该纯虚函数必须被赋值为0。
该抽象类无法实例化对象,仅该类的子类可以实例化对象,并且抽象类中的纯虚函数必须在子类中有定义。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java对这个问题搞的很清楚,c++就在这边自己跟自己过不去
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |