社区
C++ 语言
帖子详情
关于类继承的简单问题。。。
sWinZ
2006-10-06 06:41:59
类A中有个方法X,类B中也有个方法X,类B继承于类A,有没有一种方式,当调用类B中的方法X时,自动先调用类A中的X方法,然后再调用类B中的X方法???(类似于虚方法这样的内部解决方案)
...全文
787
24
打赏
收藏
关于类继承的简单问题。。。
类A中有个方法X,类B中也有个方法X,类B继承于类A,有没有一种方式,当调用类B中的方法X时,自动先调用类A中的X方法,然后再调用类B中的X方法???(类似于虚方法这样的内部解决方案)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
c8640
2006-10-08
打赏
举报
回复
看了你的贴了,其实我也很菜,很难给你非常满意的看法,但是我还是想表达一下自己的看法,说得不对,请指正:
定义:virtual A::X()
B::X()
//定义A、B类对像
A a
B b
//定义基类指针,
A *p
//用基类指针指向派生类对像。
p=b
//调用
p->X();
/*现在调用的就是A类中的虚函数X().
再在A类X()加入调用B::X() */
c8640
2006-10-08
打赏
举报
回复
纠正,上面我的想法,则错的,我在计算机上面调试过了。
大选
2006-10-08
打赏
举报
回复
帮忙顶下。
DanielWYO
2006-10-07
打赏
举报
回复
SetWindowLongPtr的时候, 类型是LONG_PTR, 非LONG哦.
你仍然转换成LONG自然错的.
cunsh
2006-10-07
打赏
举报
回复
补充下:所有操作是在同一个类中的,所以我感觉跟static没关系
===================
类的非静态成员函数的地址应该是没有办法转换为long型的.
因为有可能是虚函数. 一般指向非静态成员函数的指针不用4字节表示.
还有.你这里是个用来回调的函数吧? 回调函数也不能用非静态成员函数.否则执行的时候要绑到该类型的一个对象上才行
xueminhong
2006-10-07
打赏
举报
回复
使用向上类型转换,能办到的.
dingfengbo
2006-10-07
打赏
举报
回复
把x作为构造方法就行了
sWinZ
2006-10-07
打赏
举报
回复
找你说的把LONG改成LONG_PTR 问题一样 只不过不是转换LONG错误 变成转LONG_PTR错误
sWinZ
2006-10-06
打赏
举报
回复
补充下:所有操作是在同一个类中的,所以我感觉跟static没关系
sWinZ
2006-10-06
打赏
举报
回复
AA::WndProc不是static的
设置成SetWindowLongPtr错误照旧
DanielWYO
2006-10-06
打赏
举报
回复
前一个问题, 现有的做法都是最土的, 在继承的类中要求直接调用父类的函数成员.
DanielWYO
2006-10-06
打赏
举报
回复
前一个问题没有意义的.
后一个问题你改成SetWindowLongPtr就好了.
cunsh
2006-10-06
打赏
举报
回复
AA::WndProc是static嘛
sWinZ
2006-10-06
打赏
举报
回复
都不是我想要的答案 随便问个被的问题吧 明天结帖
SetWindowLong(hWnd, GWL_WNDPROC, (LONG)AA::WndProc);
LRESULT CALLBACK AA::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
出现错误:
错误 1 error C2440: “类型转换”: 无法从“LRESULT (__stdcall AA::* )(HWND,UINT,WPARAM,LPARAM)”转换为“LONG” e:\other\c++2005\example001\example001\aa.cpp 16
我用的是VS2005的开发环境,Win32的项目,在GOOGLE和BAIDU中查了很长时间,未能找到答案,
第一个解决这个问题的送50分
sinall
2006-10-06
打赏
举报
回复
这种方法我知道 但我想知道不用手动调用 有没有自动调用的方法? 比如在类B中没有X这个方法,程序就会自动调用类A中的X方法
——————————————————————————————————————————
呵呵,你虽然知道这种方法,但你template method模式吗?建议你看看。
举个简单例子:
class A
{
public:
virtual void X();
void Func()
{
X();
}
};
class B : public A
{
public:
virtual void X()
{
A::X();
}
};
A *p = new B;
如果B复写了X,那么p->Func()将会调用B::X;否则,仍然调用A::X。
ckt
2006-10-06
打赏
举报
回复
如上,设置虚函数就行了哪
OOPhaisky
2006-10-06
打赏
举报
回复
class A
{
public:
void X();
};
class B : public A
{
public:
void X()
{
A::X();
}
};
B b;
b.X();//先调用A::X(),再调用B::X()
jixingzhong
2006-10-06
打赏
举报
回复
要实现 当调用类B中的方法X时,自动先调用类A中的X方法,然后再调用类B中的X方法,
有很多方法,
一个是把X方法放到构造函数中去,
由于构造的时候是先构造 子对象部分, 那么上一级的 X 将先被调用 ...
或者是 B 中隐藏实现X,
其中先调用父类的 X 方法 ...
jixingzhong
2006-10-06
打赏
举报
回复
虚函数机制,
调用实际类型版本函数,
如果实际类型没有实现, 调用上一级类型实现函数 ...
sWinZ
2006-10-06
打赏
举报
回复
这种方法我知道 但我想知道不用手动调用 有没有自动调用的方法? 比如在类B中没有X这个方法,程序就会自动调用类A中的X方法
加载更多回复(4)
枚举
类
如何
继承
1.枚举
类
也是
类
,也可以有自己的成员变量,成员方法,静态方法、静态变量等,也能实现其他的接口,不能
继承
其他
类
了(因为已经
继承
了java.lang.Enum)。 2.枚举
类
与普通
类
的不同在于,它的构造器私有,这也决定了它...
python
类
的
继承
三、
类
继承
的事例 回到顶部 一、概述 面向对象编程 (OOP) 语言的一个主要功能就是“
继承
”。
继承
是指这样一种能力:它可以使用现有
类
的所有功能,并在无需重新编写原来的
类
的情况下对这些功能进行扩展。 ...
C++
类
的
继承
(终极版)
简单
易懂
大家好,这里是小张,今天给大家带来的是C++
类
的
继承
终极篇,今天小张会把剩下的
类
的
继承
内容全部说完,希望能够帮助到大家,话不多说,我们现在就开始。首先先来说说在
继承
中同名成员的处理方式:如果是访问子
类
...
java 中普通
类
继承
,抽象
类
继承
,接口
类
继承
,子
类
一定要重写父
类
中的方法吗
java 中普通
类
继承
,抽象
类
继承
,接口
类
继承
,子
类
一定要重写父
类
中的方法吗不一定。1. 普通
类
继承
,并非一定要重写父
类
方法。2. 抽象
类
继承
,如果子
类
也是一个抽象
类
,并不要求一定重写父
类
方法。如果子
类
不是抽象...
C++
类
的
继承
当一个
类
被其他的
类
继承
时,被
继承
的
类
称为基
类
,又称为父
类
。
继承
其他
类
属性的
类
称为派生
类
,又称为子
类
。 一般情况下,
继承
的进程起源于一个基
类
的定义,基
类
定义了其所有派生
类
的公有属性。从本质上
C++ 语言
64,648
社区成员
250,476
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章