社区
C++ 语言
帖子详情
虚函数返回类型问题
vcgaoshou
2007-04-25 08:00:02
派生类中定义虚函数必须与基类中的虚函数同名外,还必须同参数表,同返回类型。否则被认为是重载,而不是虚函数。如基类中返回基类指针,派生类中返回派生类指针是允许的,这是一个例外。如何理解“如基类中返回基类指针,派生类中返回派生类指针是允许的”请高手举个例
...全文
619
7
打赏
收藏
虚函数返回类型问题
派生类中定义虚函数必须与基类中的虚函数同名外,还必须同参数表,同返回类型。否则被认为是重载,而不是虚函数。如基类中返回基类指针,派生类中返回派生类指针是允许的,这是一个例外。如何理解“如基类中返回基类指针,派生类中返回派生类指针是允许的”请高手举个例
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
VCLIFE
2007-04-25
打赏
举报
回复
学习
xlbdan
2007-04-25
打赏
举报
回复
派生类中定义虚函数必须与基类中的虚函数同名外,还必须同参数表,同返回类型。否则被认为是重载,而不是虚函数。
不是重载,是覆盖了.在子类里看不到父类的那个函数了
如基类中返回基类指针,派生类中返回派生类指针是允许的,这是一个例外。如何理解“如基类中返回基类指针,派生类中返回派生类指针是允许的”请高手举个例
这是可以的,唯一的一种例外情况
class A
{
public:
virtual A* f(){}
};
class B : public A
{
public:
B* f(){}
};
这样,A和B两个类的f()函数就构成了一对虚函数
ab544027082
2007-04-25
打赏
举报
回复
虚函数的定义是这样的:
class a
{
virtual void print();
};
class b:public a
{
void print();
}
liujiwei2007
2007-04-25
打赏
举报
回复
不是覆盖 是隐藏
dai_weitao
2007-04-25
打赏
举报
回复
返回类型不同就不是继承了吧, 覆盖啊.
liujiwei2007
2007-04-25
打赏
举报
回复
派生类中定义虚函数必须与基类中的虚函数同名外,还必须同参数表,同返回类型。否则被认为是重载,而不是虚函数
不是重载。因为不在同一作用域。仍然是虚函数。
如基类中返回基类指针,派生类中返回派生类指针是允许的,这是一个例外。如何理解“如基类中返回基类指针,派生类中返回派生类指针是允许的”请高手举个例
这个应该不允许的,它破坏了多态性
lauxp
2007-04-25
打赏
举报
回复
我觉得可能在clone设计模式里面用得到:
class Base
{
virtual Base* clone() = 0;
virtual ~Base();
};
class Derived1: public Base
{
Derived1* clone()
{
return new(*this);
}
};
但是我觉得返回Base*足够了,这才体现了面向对象是面向接口的本质
=============================================================
个人理解
函数和
类型
断言
TypeScript入门,基础语法的讲解,以及类、接口、函数的定义和实现,从零开始写出第一行TypeScript代码。
虚函数
的重载和重新定义
对于
虚函数
的重载,若在派生类中仅改变函数
返回
值,则编译器不允许!(这与非
虚函数
不同,非
虚函数
在派生类中若只改变
返回
值,是允许的,且隐藏基类的所有同函数名的版本) 其他情况则和非
虚函数
相同,只要派生类中对基类
虚函数
重新定义(函数体改变或参数
类型
或参数个数改变),基类的所有同函数名的重载版本均被隐藏,只有派生类中的重新定义的版本可直接使用! #include #include #inc
C++_多态(深入理解
虚函数
表)
多态 多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。 比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时是优先买票 怎么构成多态 并没有构成多态,形参p对象,全部调用了Person类的成员函数。 多态与重写 这时候就需要使用
虚函数
来构成多态。 梳理一下,多态的条件: 继承类中,需要对
虚函数
进行重写。 基类的指针或者引用都去调用这个
虚函数
而重写的条件 3. 父子类中的函数都是
虚函数
。 4. 函数名参数
返回
值都要相
C++
虚函数
返回
值
类型
最近在看paddle的库代码时候发现一个
问题
,简单的代码如下: #include <iostream> using namespace std; class One { public: virtual One* show() { std::cout<<"1"<<std::endl; return this ; }; }; class Two: public O
c++多态(二)——
虚函数
以及
虚函数
的重写
虚函数
:即被virtual修饰的类成员函数称为
虚函数
。 class Person { public: virtual void BuyTicket() { cout << "全价票” << endl; } };
虚函数
的重写(覆盖):派生类中有一个跟基类完全相同的
虚函数
(即派生类
虚函数
与基类
虚函数
的
返回
值类 型、函数名字、参数列表完全相同),称子类的
虚函数
重写了基类的
虚函数
。 class Person { public: virtual void BuyTicket()
C++ 语言
64,652
社区成员
250,508
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章