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,这些类他们有很多相同的属性,也有不同的,这个时候我们可以使 ...
随机推荐
- PL SQL Developer报错框乱码
在系统变量里设置 变量名:NLS_LANG 变量值设为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
- 安卓---Tabhost实现页面局部刷新--父页子页之间的传值
TabHost的实现分为两种,一个是不继承TabActivity,一个是继承自TabActivity:当然了选用继承自TabActivity的话就相对容易一些,下面来看看分别是怎样来实现的吧. 我只写 ...
- 在一个form里边同时执行搜索和 execl导出功能
一个form 分搜索 和 导出<form name="searchform" id="searchform" > <input type=&q ...
- angular.js跨域post解决方案
跨域,前端开发中经常遇到的问题,AngularJS实现跨域方式类似于Ajax,使用CORS机制. 下面阐述一下AngularJS中使用$http实现跨域请求数据. AngularJS XMLHttpR ...
- snmp协议接口
所有网络设备上都会支持smap,获取服务器的基本信息,这样就不用在客户端上装应用就可以检测到基本的信息,是基于socket开发 内存调用这些命令来提取服务器的信息 snmpgetlocalhost - ...
- 使用PHP连接redis后,timeout连接太多的解决方案
这个问题,大家在使用php redis之后肯定都会遇到.所以本菜本着虚心求教的原则,又在网上四处求教.得到的答案,无非是以下两种: 1.redis没有主动close. 事后发现,这个答案纯属以讹传讹, ...
- 运用bootstrap框架的时候 引入文件的问题
还要下个jquery,因为bootstrap的js是用jquery写的如果在同一个目录下<html><head><link href="css/bootstra ...
- SolrCloud今日大纲
SolrCloud今日大纲(了解) ● 分布式集群系统基本概念 ● SolrCloud入门 ● SolrCloud搭建 ******************************* ...
- DOS下导入导出MySQL备份
导入: 1. cd d:\mysql\bin #cd 到 mysql 的 bin 目录下 2. mysql -u root -p mysql_db_name < d:\mysql\data\ba ...
- children
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> </head> ...