C++ 类的对象管理模型初讲
//类的对象管理模型初讲 #include<iostream>
using namespace std; class PointA{
private:
int x;//占据4个字节大小的内存空间
int y;//占据4个字节大小的内存空间
int z;//占据4个字节大小的内存空间
};//总共占据12个字节 class PointB{
public:
PointB(int _x, int _y,int _z){
x = _x;
y = _y;
z = _z;
}
void GetX(){
cout << x<< endl;
}
void GetY(){
cout << y << endl;
}
private:
int x;
int y;
int z;
static int c;
}; void ProtectA(){
cout << "PointA在内存中的大小是" << sizeof(PointA)<<"个字节" << endl;//打印 12个字节
cout << "PointB在内存中的大小是" << sizeof(PointB) << "个字节" << endl;//打印 12个字节
//运行结果表明 类的静态成员变量,成员函数 不在类中占据内存空间
//本质上,c++编译器对类对象中的成员变量 成员函数 静态成员变量是分开存储的
//非静态成员变量:存储于对象中,与struct变量有相同的内存布局和字节对齐方式
//静态成员变量:存储在全局区
//成员函数(包括静态成员函数):存储在代码区
//C++编译器对普通成员函数的内部处理请看图1
//c++中类其实是C语言中的结构体(存储数据)+全局函数组成的
//c++编译器对类里函数做了特殊处理,每个函数都会隐式传递一个对象指针(本质上就是个结构体指针),
//就是通过这个对象指针c++编译器才能找到每个对象里的成员属性
//对于静态成员函数,c++编译器不会为这个函数传递一个对象指针,因为静态成员函数是属于类的 } /*
总结:
1、C++类对象中的成员变量和成员函数是分开存储的。C语言中的内存四区模型仍然有效!
2、C++中类的普通成员函数都隐式包含一个指向当前对象的this指针。
3、静态成员函数、静态成员变量属于类
静态成员函数与普通成员函数的区别
静态成员函数不包含指向具体对象的指针
普通成员函数包含一个指向具体对象的指针 */ void main(){
ProtectA();
system("pause");
}
C++ 类的对象管理模型初讲的更多相关文章
- C++之面向对象初探----对象管理模型(关键是this指针)
前言 c++对象模型可以概括为以下2部分 1.语言中直接支持面向对象程序员设计部分,主要涉及如构造函数.析构函数.虚函数.继承(单继承.多继承.虚继承).多态等待. 2.对于各种支持的底层实现机制 在 ...
- python的类与对象
类与对象 1.什么是类 类和函数一样是程序编程的一种方式,在处理某些问题的时候类比函数更加适合让编程变得简化,在python里面函数式编程和类编程都是为了简化代码的一种编程方式,具体应用那个则由具体问 ...
- C++对象内存模型2 (虚函数,虚指针,虚函数表)
从例子入手,考察如下带有虚函数的类的对象内存模型: class A { public: virtual void vfunc1(); virtual void vfunc2(); void func1 ...
- Objective-C类成员变量深度剖析--oc对象内存模型
目录 Non Fragile ivars 为什么Non Fragile ivars很关键 如何寻址类成员变量 真正的“如何寻址类成员变量” Non Fragile ivars布局调整 为什么Objec ...
- Python 中的类与对象 初认识
一:类的声明 1类的关键字: 从第一天第一个项目起我们就接触过关键字,比如False True is not None return for while elif else import等等,这是语言 ...
- python类与对象-如何创建可管理的对象属性
如何创建可管理的对象属性 问题举例 在面向对象编程中, 我们把方法看作对象的接口, 直接访问对象的属性可能是不安全的,或设计上不够灵活. 但是使用调用方法在形式上不如访问属性简洁. circle.ge ...
- 第四章 Spring.Net 如何管理您的类___对象、对象工厂和应用程序上下文
在前面一章我们介绍了依赖注入,控制反转的概念,以及自己动手搭建了一下Spring.Net的环境.通过这些操作,我们知道了Spring.Net 的核心是使用依赖注入或控制反转这种思想来管理业务对象,降低 ...
- C++编译器是如何管理类和对象的,类的成员函数和成员变量
C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类.从计算机的角度,程序依然由数据段(栈区内存)和代码段(代码区内存)构成. #include ...
- 对C++对象内存模型造成的影响(类/对象的大小)
首先重新回顾一下关于类/对象大小的计算原则: 类大小计算遵循结构体对齐原则 第一个数据成员放在offset为0的位置 其它成员对齐至min(sizeof(member),#pragma pack(n) ...
随机推荐
- T-SQL 之 表变量和临时表
一.表变量 表变量在SQL Server 2000中首次被引入.表变量的具体定义包括列定义,列名,数据类型和约束.而在表变量中可以使用的约束包括主键约束,唯一约束,NULL约束和CHECK约束(外键约 ...
- grid control 11.1.0.1 安装指南
grid control 11.1.0.1 安装指南 废话少说,进入正题 系统版本号 [root@gridcontrol ~]# lsb_release -a LSB Version: :bas ...
- 43、Java动态代理一——动态类Proxy的使用
1.什么是动态代理? 答:动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实.代理一般会实现它所表示的实际对象的接口.代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统 ...
- 机器学习基石第三讲:types of learning
博客已经迁移至Marcovaldo's blog (http://marcovaldong.github.io/) 刚刚完毕机器学习基石的第三讲.这一讲主要介绍了机器学习的分类.对何种问题应该使用何种 ...
- django Models cross file ---- 跨app引用文件
一.django 的跨app引用文件是通过import 来实现的,但是import 的路径查找和标准的import 不太一样,django里面更加方便了 二.例子 1.project 结构说明 [ji ...
- 查看linux服务器硬盘IO读写负载
最近一台linux服务器出现异常,系统反映很慢,相应的应用程序也无法反映,而且还出现死机的情况,经过几天的观察了解,发现服务器压力很大,主要的压力来自硬盘的IO访问已经达到100% 为了方便各位和自己 ...
- FTPHelper-封装FTP的相关操作
using System; using System.IO; using System.Net; using System.Text; namespace Whir.Software.DataSync ...
- 使用Sigar获取服务器信息
Sigar简介 Sigar是Hyperic-hq产品的基础包,是Hyperic HQ主要的数据收集组件.它用来从许多平台收集系统和处理信息. 这些平台包括:Linux, Windows, Solari ...
- Android Studio 使用感受 错误解决
刚到公司不久,公司叫我用Android studio软件,曾经一直在用的是eclipse ADT.突然接触到的新名词让我有点适应只是来. 好吧,既然是公司要求,肯定有它的道理.就从网上下载了它的安装包 ...
- 响应式布局框架 Pure-CSS 5.0 示例中文版-下
10. 表格 Tables 在 table 标签增加 .pure-table 类 <table class="pure-table"> <thead> &l ...