社区
C++ 语言
帖子详情
基类和派生类的大小问题
Lovegarfield
2009-02-23 02:32:02
1,是不是派生类一定比基类要大?为什么?
2,static能不能修饰构造和析构函数?(我试的是不可以)
...全文
472
8
打赏
收藏
基类和派生类的大小问题
1,是不是派生类一定比基类要大?为什么? 2,static能不能修饰构造和析构函数?(我试的是不可以)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tangshuiling
2009-02-23
打赏
举报
回复
[Quote=引用 4 楼 Lovegarfield 的回复:]
我还有一个问题:
如果把一个类A的构造函数全部声明为private,那么类A能不能被实例化?我觉得是可以的,我声明一个friend函数调用我的构造函数好了,这不就实例化了吗?
[/Quote]
完全可以,但破坏了类的封装特性!
zhkefa
2009-02-23
打赏
举报
回复
[Quote=引用 4 楼 Lovegarfield 的回复:]
我还有一个问题:
如果把一个类A的构造函数全部声明为private,那么类A能不能被实例化?我觉得是可以的,我声明一个friend函数调用我的构造函数好了,这不就实例化了吗?
[/Quote]
可以,单例模式就是可以这样实现,,
herman~~
2009-02-23
打赏
举报
回复
1 可以一样大
2 static 修饰构造和析构函数都没意义。static 函数可以用于修饰类成员函数,并类同于全局函数,不需要实例化类就可以直接调用 A::StaFunc();
passionboy03
2009-02-23
打赏
举报
回复
up
[Quote=引用 1 楼 Dinelgua 的回复:]
1,是不是派生类一定比基类要大?为什么?
一定不小于父类对象。因为子类对象必然包含父类对象 见C++对象模型
即使在父类中是私有的,在子类中也会划分对应空间来存储 只是子类没有房问权限
2,static能不能修饰构造和析构函数?(我试的是不可以)
不能,静态成员函数 不能够访问类的非静态成员
既然构造和析够函数是程序运行期构造对象呢,那么一定会访问非静态成员(静态成员在编译器就决定了,不需要运行时构造…
[/Quote]
Lovegarfield
2009-02-23
打赏
举报
回复
我还有一个问题:
如果把一个类A的构造函数全部声明为private,那么类A能不能被实例化?我觉得是可以的,我声明一个friend函数调用我的构造函数好了,这不就实例化了吗?
waizqfor
2009-02-23
打赏
举报
回复
[Quote=引用楼主 Lovegarfield 的帖子:]
1,是不是派生类一定比基类要大?为什么?
2,static能不能修饰构造和析构函数?(我试的是不可以)
[/Quote]
1,是不是派生类一定比基类要大?为什么?
应该是大于等于基类 因为派生类 继承了基类的成员 而自己也有可能有自己类的成员
如果是私有类型的 那么在子类中 也会有保存 所以要大于等于基类
2,static能不能修饰构造和析构函数?
不能
static是静态成员 而构造和析构函数是非静态的成员函数
cadhy
2009-02-23
打赏
举报
回复
高手问了高问题,我是学习的
Dinelgua
2009-02-23
打赏
举报
回复
1,是不是派生类一定比基类要大?为什么?
一定不小于父类对象。因为子类对象必然包含父类对象 见C++对象模型
即使在父类中是私有的,在子类中也会划分对应空间来存储 只是子类没有房问权限
2,static能不能修饰构造和析构函数?(我试的是不可以)
不能,静态成员函数 不能够访问类的非静态成员
既然构造和析够函数是程序运行期构造对象呢,那么一定会访问非静态成员(静态成员在编译器就决定了,不需要运行时构造)
所以不能用static修饰
【C++】虚拟
基类
(virtual Base Class)详解:为什么要有虚拟
基类
?
在虚拟继承中,
派生类
会继承多个
基类
的虚表指针,这些虚表指针需要存储在对象的内存中,导致对象的内存空间变得更大,同时也会增加对象的构造和析构的时间开销。在
派生类
的构造函数中,虚拟
基类
的构造函数会在其它
基类
的构造函数执行之前被调用,以确保虚拟
基类
在所有的子对象之前被初始化。在类D中,虚拟
基类
A只有一个副本,它被类B和类C所共享。在上面的图中,类D继承自类B和类C,而类B和类C都继承自类A。因此,在设计类继承关系时,需要权衡继承层次结构的复杂性和性能开销之间的平衡,尽量避免过度使用虚拟继承。
条款3:不要对数组使用多态,例:不用
基类
指针删除
派生类
对象数组
错误代码: //.h class A{ int a; public: A(v1):a(v1=3){...}; virtual ~A(); }; class B:public A{ double b; public: B(v1=1,v2=2):b(v2),A(v1){...}; virtual ~B(); }; //.cpp void show(const A tmp[],int co...
017--C++继承中虚
基类
(最优)
简介: 多级多重继承: 会导致在
派生类
中可能会有多个相同的
基类
,因此会影响
派生类
的
大小
。所以这个就是一个
问题
,为了解决这个
问题
,虚
基类
就出现了。也就是在相关类前加关键字virtual. 有两种用法:一些特殊的情况,必须有多个相同的
基类
(一般这种情况比较少) 通常情况下,不需要多个相同的
基类
(因此引出虚
基类
的概念) 多级多重继承(
派生类
不用关键字virtual,
派生类
对象所占内存
大小
:) //多级多重继承引出虚
基类
的
问题
?什么是虚
基类
,虚
基类
能做什么。 //多级...
More Effective C++ 条款3
条款3:不要使用多态性数组类继承的最重要的特性是你可以通过
基类
指针或引用来操作
派生类
。这样的指针或引用具有行为的多态性,就好像它们同时具有多种形态。C++允许你通过
基类
指针和引用来操作
派生类
数组。不过这根本就不是一个特性,因为这样的代码根本无法如你所愿地那样运行。 假设你有一个类BST(比如是搜索树对象)和继承自BST类的
派生类
BalancedBST:class BST { ...
你了解c++中的关键字virtual吗?
virtual在英文中表示“虚”、“虚拟”的含义。c++中的关键字“virtual”主要用在两个方面:虚函数与虚
基类
。下面将分别从这两个方面对virtual进行介绍。 1.虚函数 虚函数源于c++中的类继承,是多态的一种。在c++中,一个
基类
的指针或者引用可以指向或者引用
派生类
的对象。同时,
派生类
可以重写
基类
中的成员函数。这里“重写”的要求是函数的特征标(包括参数的数目、类型和顺序)以及返回值都必须与
基类
中的函数一致。如下所示: class base { int a,b; public: voi
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章