| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2438 人关注过本帖
标题:[原创]和kuangjingbo讨论虚拟基类的问题
取消只看楼主 加入收藏
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
收藏
 问题点数:0 回复次数:2 
[原创]和kuangjingbo讨论虚拟基类的问题

virtual 的作用就是在其派生类中只有一个共享的副本.

1.为什么添加virtual后就不能产生最后派生类的对象呢?从提示可以看出,是不能访问最基类的private访问层的构造函数(virtual base游戏规则:最基类的初始化,也就是构造函数的责任,交给最后派生类担任,明白了吧?)

所以单从实现上,完全可以将最后派生类声明成最基类的友员,从而实现顺利创建最后派生类的对象,就算是private virtual也没有问题,所以这不能从根本上实现不让派生的基类.

2.为什么去掉virtual后就能产生最后派生类的对象呢?是因为最基类的构造任务是交给直接派生类担任,而且直接派生类是最基类的友员,所以就很顺利的构造了.

搜索更多相关主题的帖子: 基类 kuangjingbo 派生类 virtual 构造 
2004-04-27 21:05
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
收藏
得分:0 

是编译器自动生成的,我只是指单继承的情况,切记!

例子:

class B{};

class D:public B{};

生成D的实例时编译器首先调用B(),然后调用D的成员列表,然后调用D()

也就是D():B(),D的成员列表{}

切记~是单继承,并且是只有一个派生类

如果不是,就是具体情况而定(视编译器而定)。


I am a big fan of c plus plus.
2004-04-28 17:36
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
收藏
得分:0 
呵呵~不要在“文字”上停留不前,它们在只有一个派生类的单一继承是隐含调用的关系,你想想看,派生类的对象不就是一个基类的对象吗?想想“is a”的关系,派生类的对象产生时,在派生类对象的构造函数调用之时,记住,是“之时”,调用基类的构造函数,然后是派生类的初始成员列表,然后就是派生类的构造函数里的操作,就是这样。

I am a big fan of c plus plus.
2004-04-28 22:30
快速回复:[原创]和kuangjingbo讨论虚拟基类的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018976 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved