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) ...
随机推荐
- STL - 常用顺序容器代码
不多说,看代码 #include <iostream> #include <vector> #include <deque> #include <list&g ...
- js 实现sleep函数
1.sleep函数 sleep函数作用是让线程休眠,等到指定时间在重新唤起. 2.sleep实现 <!DOCTYPE html> <html lang="zh"& ...
- 利用JMX统计远程JAVA进程的CPU和Memory---jVM managerment API
从JAVA 5开始,JDK提供了一些JVM检测的API,这就是有名的java.lang.management 包,包里提供了许多MXBean的接口类,可以很方便的获取到JVM的内存.GC.线程.锁.c ...
- 如何自动生成Makefile
作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的M ...
- panel,dialog,window组件越界(超出范围)问题汇总
参考地址 之前分别写过panel,dialog,window三个组件因为拖曳或者reSize造成组件越界而无法还原的问题,两篇文章分别针对拖曳和reSize给出了解决方案.不过根据朋友的反馈,reSi ...
- HTML-IE6复制BUG
在IE6下使用浮动可能会出现文字重复的情况. 在IE6下,浮动层之间有注释文字的话,之前那个浮动层的内容文字就有可能遭遇一个“隐形”的复制,但是代码里查看文字可并没有多出来. 看个例子: XML/HT ...
- C#指南,重温基础,展望远方!(9)C#接口
接口定义了可由类和结构实现的协定. 接口可以包含方法.属性.事件和索引器. 接口不提供所定义的成员的实现代码,仅指定必须由实现接口的类或结构提供的成员. 接口可以采用多重继承. 在以下示例中,接口 I ...
- Spark SQL and DataFrame Guide(1.4.1)——之DataFrames
Spark SQL是处理结构化数据的Spark模块.它提供了DataFrames这样的编程抽象.同一时候也能够作为分布式SQL查询引擎使用. DataFrames DataFrame是一个带有列名的分 ...
- unity, 不要change Default sharedMaterial
假设在场景中加一个sprite,其材质使用默认的Sprites-Default. 若调用: Color color=sprite.GetComponent<SpriteRenderer>( ...
- unity, undo
如果在操作一个Object之前调用Undo.RecordObject(Object),且操作确实造成Object某些属性的改变,则会产生一个undo记录. 如果我们的架构不是直接操作Object,而是 ...