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) ...
随机推荐
- android的开发 华为手机上不显示menu键
android的开发,华为手机上不显示menu键解决办法: 在AndroidManifest.xml中讲targetSdkVersion改为9. <uses-sdk android:minSdk ...
- CA证书服务器从2003迁移到2008 R2!
1.在源 CA 服务器中备份相应的 CA :
- MSCRM 2011 JavaScript 开发文档
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvem91eXVqaWUxMTI3/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- 算法笔记_143:构造无向图的欧拉回路(Java)
目录 1 问题描述 2 解决方案 1 问题描述 具体链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Item ...
- 对象 get和set方法
1.用途 用户定义的对象定义 getter 和 setter 以支持新增的属性. 示例:obj创建一个伪属性latest,它会返回log数组的最后一个元素. var obj = { log: ['ex ...
- OpenERP Web开发
转自:http://blog.csdn.net/mackz/article/details/22581517 在7和8下测试均可. 1.相关库/框架 主要:jQuery(使用1.8.3,如果使用新版本 ...
- Java之字节码(2) - .class文件格式详解
转载来自 小介:去 年在读<深入解析JVM>的时候写的,记得当时还想着用自己的代码解析字节码的,最后只完成了一部分.现在都不知道还有没有保留着,貌似Apache有现 成的BCEL工程可以做 ...
- phpredis中文手册——《redis中文手册》 php版(转)
redis中文手册:http://readthedocs.org/docs/redis/en/latest/ 本文是参考<redis中文手册>,将示例代码用php来实现,注意php-red ...
- 【LeetCode】102. Binary Tree Level Order Traversal (2 solutions)
Binary Tree Level Order Traversal Given a binary tree, return the level order traversal of its nodes ...
- Linux命令-文件搜索命令:grep
选项: -A 数字:表示查看满足条件行后的N条记录 -B 数字:表示查看满足条件行前的N条记录 -C 数字:表示查看满足条件行前后各N条记录 more /etc/inittab 分页查看inittab ...