社区
C++ 语言
帖子详情
重载基类函数的问题
csdn_tw
2005-12-29 10:34:22
有没有办法在派生类中重载基类中声明的一个方法,该方法在基类的protected中声明,但不是虚函数
...全文
190
9
打赏
收藏
重载基类函数的问题
有没有办法在派生类中重载基类中声明的一个方法,该方法在基类的protected中声明,但不是虚函数
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
csdn_tw
2005-12-30
打赏
举报
回复
这么多热心人,谢谢大家.
对,应该是覆盖,不能叫重载,实际上我用的是DELPHI的VCL类库中的一个控件类作为基类,派生出我自己的控件类,而且在派生类中已经声明了同名函数,而且参数类型和位置都与基类一样,但跟踪调试发现,代码还是运行基类中的函数代码,所以才想起请教大家,看看是什么问题,谁还能帮忙分析一下?
sankt
2005-12-29
打赏
举报
回复
有没有办法在派生类中重载基类中声明的一个方法,该方法在基类的protected中声明,但不是虚函数
//=============
一、覆盖是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual关键字。
二、"隐藏"是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。
ericqxg007
2005-12-29
打赏
举报
回复
恩 同意sanhill() 的说法 这正是所说的覆盖 不是重载
sanhill
2005-12-29
打赏
举报
回复
自己重新在派生类中改写一遍那个成员函数就好了,派生类的成员函数会覆盖父类的非虚同名函数的,正好达到你要的效果嘛
csdn_tw
2005-12-29
打赏
举报
回复
忘说一句,这个方法在基类中被基类的私有函数调用,我想把这个方法在派生类中重新实现,使派生类的实例在运行时执行我写的代码
cunsh
2005-12-29
打赏
举报
回复
class A{
protected:
void func(){}
};
class B: public A{
protected:
A::func; ///////
再写你要重载的func.
SuperXu_swjtu
2005-12-29
打赏
举报
回复
上面例子里面:
基类的私有函数vcallProtected()调用了保护函数vgetValue(),然后在构造函数中又调用了私有函数vcallProtected()输出值;
而派生类重写了vgetValue()函数,在构造函数中调用,我觉得应该实现了你说的要求了。
SuperXu_swjtu
2005-12-29
打赏
举报
回复
#include<iostream>
#include<string.h>
using namespace std;
class Base{
public:
Base(const int b);
~Base()
{
cout << "~Base()" << endl;
}
protected:
int getValue()
{
return bValue;
}
private:
int bValue;
void callProtected()
{
cout << "call Protected function: " << getValue() << endl;
}
};
Base::Base(const int b = 0) :bValue(b)
{
cout << "Base()" << endl;
callProtected();
}
class Derived : public Base{
public:
Derived(const int d);
~Derived()
{
cout << "~Derived()" << endl;
}
int getValue()
{
cout << "Derived getValue()" << endl;
return 10;
}
private:
int di;
};
Derived::Derived(const int d) : Base(3), di(d)
{
cout << "Derived()" << endl;
cout << getValue() << endl;
}
int main()
{
Base b(2);
cout << endl;
cout << endl;
Derived d(3);
return 0 ;
}
好像实现了你说的要求,但是可以看出基类中的getValue()已经被隐藏了!
snowred_bai
2005-12-29
打赏
举报
回复
不能用virtual关键字的话,那只有用静态连编了。
可以定义派生类的函数与基类的函数同名,并且参数也相同,这样的话,可以满足你的要求。
C++虚
函数
、虚
基类
、C++实例、运算符
重载
C++虚
函数
、虚
基类
、C++实例、运算符
重载
mfc类库详解chm中文
支持开源! mfc类库详解.zip 该MFC参考含盖了Microsoft基本类库中的类、全局
函数
、全局变量和宏的内容。...每个类的说明文档包括:该类的概括、类成员的种类、以及该成员
函数
、
重载
操作符或数据成员的基本用途。
C++ 派生类覆盖
重载
基类
函数
派生类希望
基类
重载
函数
可见,情况有三种: a)派生类中覆盖某个版本,则某个版本可见,全部都覆盖重写,则全部版本可见。 b)派生类中一个也不覆盖,则全部
基类
版本可见。 c)派生类需要添加新的
重载
版本,...
C++:在派生类里
重载
基类
的虚拟
函数
如果在派生类内
重载
了
基类
的虚拟
函数
: 可以看到,如果在派生类中
重载
了
基类
的虚拟
函数
,那么派生类的版本依然会掩盖
基类
版本的可见性。但是为什么通过指向派生类的
基类
指针调用的都是
基类
版本呢?个人认为:虚...
C++:在派生类里
重载
基类
的非虚拟
函数
如果不通过using在派生类中声明
基类
版本的可见性,那么派生类内
重载
的非虚拟
函数
会掩盖
基类
版本。也就是说,
基类
中只有
基类
的版本,派生类中只有派生类的版本。2.如果通过using在派生类中声明
基类
版本的可见性,那么...
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章