社区
C++ 语言
帖子详情
c++类的问题
jdbc945
2010-04-15 11:05:25
遇到此情况
class2是继承class1的
代码: class1 c = new class2;
那对象c的类到底是class1还是class2,这样做有何意图
typeid(c)又等于class1 还是class2 请解释 谢谢
...全文
234
34
打赏
收藏
c++类的问题
遇到此情况 class2是继承class1的 代码: class1 c = new class2; 那对象c的类到底是class1还是class2,这样做有何意图 typeid(c)又等于class1 还是class2 请解释 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
34 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wang7890
2010-04-18
打赏
举报
回复
顶 6 楼,很生动
品茶
2010-04-18
打赏
举报
回复
[Quote=引用 10 楼 jdbc945 的回复:]
我就是想不通,他为啥偏要是class1 *c 他和class2 *c有啥区别呢
[/Quote]
class1 *c//这里的c是基类指针,可以指向所有子类对象
class2 *c//这里的c只能指向class2类,不能指向基类和其他子类对象。
这样做的好处:
只需要定义一个指针
需要注意的地方:
基类的析构函数必须写成虚函数,这样才会调用子类的析构函数释放new出来的子类对象。
ForestDB
2010-04-17
打赏
举报
回复
那个上厕所的挺好。
zhenhua0831
2010-04-17
打赏
举报
回复
呵呵,六楼的太你比了,学习学习……
starcat
2010-04-16
打赏
举报
回复
[Quote=引用 9 楼 jdbc945 的回复:]
如果class2多了一些成员,c里面会有么?
[/Quote]楼主百度Object slicing
jdbc945
2010-04-16
打赏
举报
回复
我就是想不通,他为啥偏要是class1 *c 他和class2 *c有啥区别呢
jdbc945
2010-04-16
打赏
举报
回复
如果class2多了一些成员,c里面会有么?
sld009
2010-04-16
打赏
举报
回复
多态用于lz妈妈喊lz吃饭:
假设只要是人都会吃饭,人为抽象类,lz继承于人
妈妈叫你吃饭的时候只需要说“大家都吃饭”,而不用说“lz吃饭,1吃饭,2吃饭,3吃饭”
简而言之,多态即不同对象(lz,1,2,3)的同一行为(吃饭)
seraph89
2010-04-16
打赏
举报
回复
6楼 学习了!
decoupling
2010-04-16
打赏
举报
回复
这是多态..你写一些程序自然会明白 如果不写写东西 确实很难弄清楚为什么程序要那么写..解释起来你也很难理解..
FingerStyle
2010-04-16
打赏
举报
回复
java转C++ ? o o.
crysnower__
2010-04-16
打赏
举报
回复
基类定义虚函数是为了 在子类中多态化
「已注销」
2010-04-16
打赏
举报
回复
6楼解释的很形象-_-
oyjian
2010-04-16
打赏
举报
回复
搞错了,
fun(d1);
fun(d2);
应该修改为
fun(&d1);
fun(&d2);
oyjian
2010-04-16
打赏
举报
回复
C++的多态是通过虚函数来实现的,如果基类没有虚函数,那么就没有存在多态的问题了。
例如:
class CBase
{
virtual
void fBase(){cout << "CBase::fBase()";}
};
class CD1:public CBase
{void fBase(){cout << "CD1::fBase()";}
};
class CD2:public CBase
{void fBase(){cout << "CD2::fBase()";}
};
void fun(CBase*p)
{p->fBase();}
CD1 d1;
CD2 d2;
fun(d1);
fun(d2);
如果CBase::fBase()前面有virtual则输出结果为:
CD1::fBase()
CD2::fBase()
这时候是多态。
否则,输出结果为:
CBase::fBase()
CBase::fBase()
sallan
2010-04-16
打赏
举报
回复
6楼说的话糙理不糙,很容易懂
elegant87
2010-04-16
打赏
举报
回复
[Quote=引用 9 楼 jdbc945 的回复:]
如果class2多了一些成员,c里面会有么?
[/Quote]
不会有的。C++这样做是为了实现多肽,通过基类对象指针来访问派生类的继承的虚拟成员
wang7890
2010-04-16
打赏
举报
回复
6楼很形象
herman~~
2010-04-16
打赏
举报
回复
new后面的参数告诉编译器,你想构造的是哪个对象,至于你想把返回的指针赋值给什么类型就由你决定,但是里面的内存结构就是你new出来的对象的
howlet2
2010-04-16
打赏
举报
回复
[Quote=引用 26 楼 howlet2 的回复:]
class1* c = new class2;
这样作只是得到了新建的一个类的地址,没什么别的意图。
[/Quote]
这样作只是得到了新建的一个对象的地址,没什么别的意图
加载更多回复(14)
visual
c++
6.0英文版
其次,Visual
C++
6.0包含了MFC(Microsoft Foundation Classes)库,这是一个面向对象的
类
库,基于Windows API构建,提供了丰富的控件和窗口
类
,简化了Windows应用程序的开发。通过MFC,开发者可以快速创建用户界面...
C++
编程实例100篇
通过这些实例,学习者不仅可以深化对
C++
语法的理解,还能接触到实际
问题
的解决方案,提高解决编程
问题
的能力。每个实例都可能是一个独立的小项目,涉及特定主题,通过实践,学习者能够巩固理论知识,提升编程技能。
Visual
C++
游戏开发经典案例详解.pdf
理解
类
、对象、继承、多态等核心概念是游戏开发的基础。 2. **MFC框架**:Microsoft Foundation Classes (MFC) 是Visual
C++
提供的一种应用程序框架,用于简化Windows应用程序的开发。在游戏开发中,MFC可以用于...
华为
C++
培训资料
华为
C++
培训资料 部分内容 第一章
类
、接口 ………………………………………………………………… 7 1.1 Handle-Body与接口、抽象接口 …………………………………………7 1.2 多继承、与菱形缺陷、this跳转等...
C++
“超级玛丽”游戏的源代码
1. **
C++
基础**: 首先,源代码将展示
C++
的基础语法,包括
类
、对象、函数、循环、条件语句、数组和字符串的使用。这些都是构建任何
C++
程序的基础。 2. **面向对象编程**:
C++
的强项在于其面向对象特性,如封装、继承...
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章