C++ 类的继承、虚拟继承、隐藏、占用空间
主函数:
#include <iostream>
#include "test.h"
#include "testfuc.h"
using namespace std; int main(void)
{
a *p=new b(); p->fuc(); cout<<"指针p占用空间"<<sizeof(p)<<endl;
cout<<"类占用空间"<<sizeof(a)<<endl; delete p; return ;
}
test.h
#ifndef TEST_H
#define TEST_H class a
{
public:
a();
~a();
void virtual fuc();
}; class b:public a
{
public:
b();
~b();
void fuc();
}; #endif
testfuc.h
#ifndef testfuc_h
#define testfuc_h #include <iostream>
using namespace std; a::a()
{
cout<<"a的构造函数"<<endl;
} a::~a()
{
cout<<"a的析构函数"<<endl;
} b::b()
{
cout<<"b的构造函数"<<endl;
}
b::~b()
{
cout<<"b的析构函数"<<endl;
} void a::fuc()
{
cout<<"a的函数"<<endl;
} void b::fuc()
{
cout<<"b的函数"<<endl;
}
#endif
运行结果:
a的构造函数
b的构造函数
b的函数
指针p占用空间8
类占用空间8 //每个虚函数的类都要有8字节(64位系统)指针指向自己的虚函数表
a的析构函数
将
a *p=new b();
改为
b *p=new b();
运行结果:
a的构造函数
b的构造函数
b的函数
指针p占用空间8
类占用空间8
b的析构函数
a的析构函数
将virtual去掉 a *p=new b();
运行结果:
a的构造函数
b的构造函数
a的函数
指针p占用空间8
类占用空间1
a的析构函数
将virtual去掉 b *p=new b();
运行结果:
a的构造函数
b的构造函数
b的函数
指针p占用空间8
类占用空间1
b的析构函数
a的析构函数
C++ 类的继承、虚拟继承、隐藏、占用空间的更多相关文章
- C++ 虚拟继承
1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念.虚拟基类是为解决多重继承而出现的.如:类D继承自类B1.B2,而类B1.B2都继 承自类A,因此在类D中两次出现类A中的变量和函数.为了节省内 ...
- 关于C++中的虚拟继承的一些总结
1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念.虚拟基类是为解决多重继承而出现的.如:类D继承自类B1.B2,而类B1.B2都继承自类A,因此在类D中两次出现类A中的变量和函数.为了节省内存 ...
- c++面试常用知识(sizeof计算类的大小,虚拟继承,重载,隐藏,覆盖)
一. sizeof计算结构体 注:本机机器字长为64位 1.最普通的类和普通的继承 #include<iostream> using namespace std; class Parent ...
- C++继承 派生类中的内存布局(单继承、多继承、虚拟继承)
今天在网上看到了一篇写得非常好的文章,是有关c++类继承内存布局的.看了之后获益良多,现在转在我自己的博客里面,作为以后复习之用. ——谈VC++对象模型(美)简.格雷程化 译 译者前言 一个C ...
- 继承虚函数浅谈 c++ 类,继承类,有虚函数的类,虚拟继承的类的内存布局,使用vs2010打印布局结果。
本文笔者在青岛逛街的时候突然想到的...最近就有想写几篇关于继承虚函数的笔记,所以回家到之后就奋笔疾书的写出来发布了 应用sizeof函数求类巨细这个问题在很多面试,口试题中很轻易考,而涉及到类的时候 ...
- 关于虚拟继承类的大小问题探索,VC++ 和 G++ 结果是有区别的
昨天笔试遇到个 关于类占用的空间大小的问题,以前没怎么重视,回来做个试验,还真发现了问题,以后各位笔试考官门,出题时请注明是用什么编译器. vc6/vc8 cl 和 Dev-C 的g++ 来做的测试: ...
- 图文例解C++类的多重继承与虚拟继承
文章导读:C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承. 在过去的学习中,我们始终接触的单个类的继承,但是在现实生活中,一些新事物往往会拥有两个或者两个以上事物的属性,为了解决这个 ...
- YTU 2622: B 虚拟继承(虚基类)-沙发床(改错题)
2622: B 虚拟继承(虚基类)-沙发床(改错题) 时间限制: 1 Sec 内存限制: 128 MB 提交: 487 解决: 393 题目描述 有一种特殊的床,既能当床(Bed)用又能当沙发(S ...
- 《挑战30天C++入门极限》图文例解C++类的多重继承与虚拟继承
图文例解C++类的多重继承与虚拟继承 在过去的学习中,我们始终接触的单个类的继承,但是在现实生活中,一些新事物往往会拥有两个或者两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念 ...
- 实现继承+接口继承+虚方法+隐藏方法+this/base+抽象类+密封类/方法+修饰符
概念: 在上一节课中学习了如何定义类,用类当做模板来声明我们的数据. 很多类中有相似的数据,比如在一个游戏中,有Boss类,小怪类Enemy,这些类他们有很多相同的属性,也有不同的,这个时候我们可以使 ...
随机推荐
- javabean解决jsp中中文乱码问题
问题描述:useBean行为定义了Java Bean对象(Person类包括姓名[string],年龄[int]),使用html页面向JSP页面提交数据,JSP页面中使用Java Bean行为来处理提 ...
- 【IE6的疯狂之一】IE6中奇数宽高的BUG
IE6真是太疯狂了.今天由于项目需要做了这么一个布局:一个外部的相对定位div,内部一个绝对定位的div(right:0), 如图: 可是在IE6下查看,却变成了right:1px的效果了: IE6还 ...
- iOS 隐藏导航栏 隐藏状态栏
1导航栏 self.navigationController.navigationBarHidden = YES; 2 状态栏 [[UIApplication sharedApplication] s ...
- GCD系列 之(二): 多核心的性能
全局队列的并发执行 for(id obj in array) [self doSomethingIntensiveWith:obj]; 假设,每个元素要做的事情-doSomethingIntensiv ...
- Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
netstat -tulpn| grep :80 killall -9 httpd /etc/init.d/httpd start or service httpd start
- H264帧内预测模式编号的编码过程
1 本文词汇约定 宏块:H264编码基本单元,16x16像素(或采样)构成 块: 由8x8像素(或采样)构成的单位 子块: 由4x4像素(或采样)构成的单位 2 帧内亮度预测模式 H264规范 ...
- Byte Array to Hexadecimal String
Lookup Text: 23,879.41 (20.8X faster) Sentence: 1.15 (23.9X faster) /// <summary> /// Hex stri ...
- php常用数学函数
php常用数学函数1. bcadd 任意精度数的相加2. bcsub 任意精度数的减法3. bcmul 乘法, bcdiv除法 4. bcmod 取余数. (比%功能更强大)5. bcpow 幂函数运 ...
- Managed Switch: Confs
shortcuts: c-w: delete word before c-a: move to first char c-y: delete everything after cursor c-z: ...
- 图片验证码自动识别,使用tess4j进行验证码自动识别(java实现)
1.下载tess4j依赖的jar包,maven中央库地址:<dependency> <groupId>net.sourceforge.tess4j< ...