设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 823|回复: 9
打印 上一主题 下一主题

求助几个C++的概念问题

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-3 01:34:47 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1。一个类有一个无参构造函数和一个有参构造函数,那可不可以在无参构造函数里面调用有参构造函数。
2。覆盖和重载的区别。
3。在哪些情况下必须调用构造函数。
10#
发表于 2009-11-3 01:35:10 | 只看该作者
恩,也就是说,覆盖只能是基类和派生类之间同过虚函数才能产生的。函数声明必须一样,函数定义却应该不一样(要不然覆盖也就失去了意义)。而函数重载(任何地方都可以重载函数,只要你确实需要)则要求必须是函数声明中,函数名一样,函数的参数类型或数量不同。至于定义可以相同,也可不相同。
回复 支持 反对

使用道具 举报

9#
发表于 2009-11-3 01:35:08 | 只看该作者
以下是引用sherbin在2006-4-20 12:32:00的发言:
1。一个类有一个无参构造函数和一个有参构造函数,那可不可以在无参构造函数里面调用有参构造函数。
2。覆盖和重载的区别。
3。在哪些情况下必须调用构造函数。
1、在无参数构造函数中调用有参构造函数,那么有参构造函数的参数何来?
2、覆盖有时也被称为改写(override),覆盖是指对某一个函数的完全复写,包括返回值、参数名和参数表,如果其实现没有区别,那么这种覆盖就没有任何意义了,覆盖只能出现在子类继承父类并实现其虚拟函数时出现。重载(voerloaded)则要求函数的参数表必须有变化否,以使得同名函数表现出不同的处理功能。这种情况即可出现在父子继承关系中,也可出现在同一个类或不同的多个类中。两者都被称作是多态,也可以这样说覆盖是重载一种特殊情况。两者最重要的区别是,重载通常是在编译时解析的,是静态的;而改写则是一种运行时机制,即对于一个给定的调用,可能无法预言其将会执行何种行为,而只有到程序实际运行的时候才能对其进行确定。
3、你这个问题问得不是很明确,在任何情况下编译器都会为你调用构造函数。即使你没有显示的写出默认构造函数,编译器也会为你强行加入一个构造函数,以便在运行的时候调用。应该说,当你需要按照你要求的方式构造某个对象时,必须调用显示的调用有参构造数初始始化你的对象。这完全取决于你自己。
回复 支持 反对

使用道具 举报

8#
发表于 2009-11-3 01:35:07 | 只看该作者
我说的第3个问题是什么时候必须调用构造函数,我知道有一种情况是当有引用数据成员时,因为引用成员必须在定义的时候就初始化,所以这种情况必须调用构造函数,这和拷贝构造函数不是一回事
回复 支持 反对

使用道具 举报

7#
发表于 2009-11-3 01:35:03 | 只看该作者
1。一个类有一个无参构造函数和一个有参构造函数,那可不可以在无参构造函数里面调用有参构造函数。
不行
因为你的构造函数就是在执行类的定义,再还没有定义完全的时候又开始另一种重载定义,定义是不能递归自己的
3.在你的数据成员有指针等需要分配堆区间时(PNEW/DELETE),需要自己写,要不系统自动浅拷贝.而浅拷贝只能拷贝它的数值.
如果没有分配堆区间的动作系统的默认拷贝就能完成.
2.第二个没学呢.不知道覆盖
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-3 01:35:01 | 只看该作者
重载和覆盖不是同一个概念
不要误人子弟
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-3 01:35:00 | 只看该作者
重载是override吧?覆盖的英文是什么?
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-3 01:34:59 | 只看该作者
太难了,
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-3 01:34:57 | 只看该作者
我还没学到呢!不好意识啊
回复 支持 反对

使用道具 举报

2#
发表于 2009-11-3 01:34:48 | 只看该作者
的确很概念!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 03:43 , Processed in 0.115318 second(s), 9 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表