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");
}
时间: 2024-10-06 00:07:11

C++ 类的对象管理模型初讲的相关文章

C++对象内存模型2 (虚函数,虚指针,虚函数表)

从例子入手,考察如下带有虚函数的类的对象内存模型: 1 class A { 2 public: 3 virtual void vfunc1(); 4 virtual void vfunc2(); 5 void func1(); 6 void func2(); 7 virtual ~A(); 8 private: 9 int m_data1, m_data2; 10 }; 11 12 class B : A { 13 public: 14 virtual void vfunc1();; 15 vo

Python 中的类与对象 初认识

一:类的声明 1类的关键字: 从第一天第一个项目起我们就接触过关键字,比如False True is not None return for while elif else import等等,这是语言中内定的一个语法规则吧,通过关键字告诉电脑下面一个字母或一段 代码是什么,要用来干什么,告诉电脑怎么以哪种规则去用. 而class就是类的关键字,告诉系统我要定义一个类了.让系统用理解类的规则来理解我下面 的一些代码.没有关键字来声明一下,系统就不知道下面的代码是什么. 2.标识符: 标识符就是用来

黑马程序员---OC基础6【内存管理】【手动内存管理】【单、多个对象的内存管理】【*@property参数】【@class的使用】【NSString类的内存管理】【autorelease使用】

------- iOS培训.Android培训.Java培训.期待与您交流! ---------- [内存管理] 1.内存管理概念 由于移动设备内存及其有限,所以每个app所占的内存也是有限的 需要回收一些不使用的空间 2.OC内存管理的范围 管理任何继承NSOject的对象,对其他的基本数据类型无效 主要管理堆区中的对象的内存管理   3.内存管理的原理 1)对象所有权概念 任何对象都可以能拥有一个或多个所有者,只要一个对象至少还拥有一个所有者,他就会继续存在 cocoasu所有权策略 任何自

Python基础- 类和对象(使用、继承、派生、组合、接口、多态、封装、property、staticmethod、classmethod、反射、slots、上下文管理协议、元类)

标签: python对象 2017-07-01 16:28 79人阅读 评论(0) 收藏 举报  分类: python(11)  版权声明:本文为广大朋友交流学习,如有纰漏望不吝赐教,若存在版权侵犯请及时与我联系 目录(?)[+] 一.初识类和对象 在python3中类型就是类 先定义类在产生相对应的对象,也就是现有了概念再有了实体 class Garen: camp = 'Demacia' def attack(self): print('attack') 1.如何使用类 在python3:

Effective C++ 条款13/14 以对象管理资源 || 在资源管理类中小心拷贝行为

三.资源管理       资源就是一旦你使用了它,将来不用的时候必须归还系统.C++中最常用的资源就是动态内存分配.其实,资源还有 文件描述符.互斥器.图形界面中的字形.画刷.数据库连接.socket等. 1.        以对象管理资源       void f() {     investment *plv = createInvestment();     //这里存在很多不定因素,可能造成下面语句无法执行,这就存在资源泄露的可能.     delete plv; }      这里我们

C#基本语法复习-创建并管理类和对象

控制可访问性: private一个方法或字段只允许从类的内部访问,private关键字是默认的 public方法或字段既能从类的内部访问也能从外部访问 方法中声明的变量默认是不初始化的,而类中的字段自动初始化为0,null,false 使用构造器: 与类同名.能获取参数,但不能返回任何的值(即使是void),构造函数一般申明为public,如果声明为private则无法再类的外部构造类的对象. 分部类: 使用partial关键字修饰类. 假如方法中的参数与一个变量同名,则在该方法的任何语句中,参

Django Admin Cookbook-35如何使用带有大量对象的FK管理模型

35.如何使用带有大量对象的FK管理模型? 你可以通过如下代码创建大量Category对象: categories = [Category(**{"name": "cat-{}".format(i)}) for i in range(100000)] Category.objects.bulk_create(categories) 现在,Category拥有超过100000个对象,当您进入Hero修改页面是时,类别字段将是一个包含100000个选择下拉列表.这将使页

第一讲、类和对象-------(2)

一.课程回顾 1.面向对象的语言 面向对象编程:以事物为中心 面向过程编程:以事件为中心 2.类和对象 描述类:具有相同特征和行为的事物的抽象 对象是类的实例,类是对象的抽象 3.定义类 接口部分:声明类的特征(实例变量)和行为(方法) 实现部分:实现方法 4.创建对象 Person * p1 = [[Person alloc] init]; alloc 类方法 只有类可以调用 作用:在堆区为对象分配存储空间:将存储空间清空,所有实例变量设置为0:返回对象存储空间的首地址. init 实例方法 

第一讲、类和对象

一.OC概述 代码格式 int main(int argc, const char * argv[]) {    @autoreleasepool { 代码区 }      return 0;     } 1.OC中支持基本数据类型  int .float 2.C语言中使用字符串  "hello"                        OC中使用字符串对象 @"hello" 3.NSString是系统类库提供的--字符串类           定义对象类型的