首先我们随意定义4个类结构

class cl1
{
private:
int age;
string name;
static int addr;
public:
cl1()
{ }
void iwasthelastlivingsoul()
{ }
int getage()
{
return this->age;
}
}; //32
class cl2
{
private:
int age;
string name;
public:
cl2()
{ }
void iwasthelastlivingsoul()
{ }
int getage()
{
return this->age;
}
};//
class cl3
{
private:
string name;
public:
cl3()
{ }
void iwasthelastlivingsoul()
{ }
int getage()
{
}
};
class cl4
{
private:
string name;
public:
cl4()
{
}
~cl4()
{
}
};
  • 主程序
void main()
{
cl1 c1;
cout << sizeof(c1) << endl;
cl2 c2;
cout << sizeof(c2) << endl;
cl3 c3;
cout << sizeof(c3) << endl;
cl4 c4;
cout << sizeof(c4) << endl;
system("pause");
}

输出结果:

32
32
28
28
请按任意键继续. . .

由此可见 string类型占据了28个字节。这是个伟大发现,因为至少我读的C++教材里没有介绍的,哦哈哈哈哈

不信?那再试试

class cl5
{
private:
string name;
string favorite;
public:
cl5()
{
}
~cl5()
{
}
}; void main()
{
cl5 c5;
cout << sizeof(c5) << endl;
system("pause");
}

56
请按任意键继续. . .

言归正传,由cl1和cl2的大小比较 static int静态整型实际上放在了全局变量区而并不占用类声明的空间,而那些成员函数应该就放在代码去了,只有运行时才分配内存

  • 不同类对象调用相同成员方法如何做到互不干扰呢
#include<iostream>
#include<string>
using namespace std;
class cl1
{
private:
int age;
string name;
static int addr;
public:
cl1(string name)
{
this->name = name;
}
void iwasthelastlivingsoul()
{
cout << "hello,I'm " <<this->name<< endl;
}
int getage()
{
return this->age;
}
}; void main()
{
cl1 c1("陈培昌");
c1.iwasthelastlivingsoul();
cl1 c2("徐晓冬");
c2.iwasthelastlivingsoul();
cl1 c3("付高峰");
c3.iwasthelastlivingsoul();
system("pause");
}

输出结果:

hello,I'm 陈培昌
hello,I'm 徐晓冬
hello,I'm 付高峰
请按任意键继续. . .

这是由于C++类中,普通成员函数包含一个指向具体对象的指针,而静态成员函数不包括。

静态成员变量和静态成员函数属于类(而不是对象),静态成员函数不含指向具体对象的指针

c++面向对象模型---c++如何管理类,对象以及它们之间的联系的更多相关文章

  1. models管理类抽取基类

    Models类 models.py # coding:utf-8 from django.db import models from db.Base_model import Base_Model f ...

  2. [类和对象]3 C++面向对象模型初探

    ? C++编译器如何完成面向对象理论到计算机程序的转化? [C++编译器是如何管理类.对象.类和对象之间的关系] 通过下面的代码,我们可以的得出:C++类对象中的成员变量和成员函数是分开存储的 成员变 ...

  3. c++面向过程和面向对象-C++编译器是如何管理类和对象的

    1,c++编译时如何区分对象调用类的方法? C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类.从计算机的角度,程序依然由数据段(栈区内存)和代 ...

  4. PowerDesigner(八)-面向对象模型(用例图,序列图,类图,生成Java源代码及Java源代码生成类图)(转)

    面向对象模型 面向对象模型是利用UML(统一建模语言)的图形来描述系统结构的模型,它从不同角度实现系统的工作状态.这些图形有助于用户,管理人员,系统分析人员,开发人员,测试人员和其他人员之间进行信息交 ...

  5. 八、面向对象模型(用例图,序列图,类图,生成Java源代码及Java源代码生成类图)

    面向对象模型 面向对象模型是利用UML(统一建模语言)的图形来描述系统结构的模型,它从不同角度实现系统的工作状态.这些图形有助于用户,管理人员,系统分析人员,开发人员,测试人员和其他人员之间进行信息交 ...

  6. python类与对象-如何创建可管理的对象属性

    如何创建可管理的对象属性 问题举例 在面向对象编程中, 我们把方法看作对象的接口, 直接访问对象的属性可能是不安全的,或设计上不够灵活. 但是使用调用方法在形式上不如访问属性简洁. circle.ge ...

  7. C++编译器是如何管理类和对象的,类的成员函数和成员变量

    C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类.从计算机的角度,程序依然由数据段(栈区内存)和代码段(代码区内存)构成. #include ...

  8. 【Unity3D游戏开发】之全局管理类的几种方式 (十六)

    如何在Unity中实现全局管理类?由于Unity脚本的运行机制和面向组件编程(COP)的思想,实现起来和普通的方式略有差别. 第一种方式是使用静态类.适合存储一些全局的变量,如游戏当前关卡.玩家得分等 ...

  9. PowerDesigner 面向对象模型(OOM)

    PowerDesigner 面向对象模型(OOM)说明 nulljavasystemstringpowerbuilderclass   目录(?)[+]   一.     OOM 简介 Object- ...

随机推荐

  1. circRNA数据库的建立

      circRNA数据库的建立 wget http://circbase.org/download/human_hg19_circRNAs_putative_spliced_sequence.fa.g ...

  2. Ubuntu16.04安装qt

    5.11官方下载网站: http://download.qt.io/official_releases/qt/5.11/5.11.1/ 可以直接下载linux系统下的.run安装包: 安装方式:htt ...

  3. 016 Android 图片选择器(在选中和未选中的过程中,切换展示图片)

    1.目标效果 在选中和未选中的过程中,切换展示图片 2.实现方法 (1)在app--->res--->drawable 右击drawable文件夹右键,new ---->drawab ...

  4. [.Net Core] - 使用 NLog 记录日志到 Sql Server

    1. 使用 Nuget 安装 NLog. 2. 在 Sql Server 中创建 NLog 数据表. CREATE TABLE [dbo].[NLogInfo]( ,) NOT NULL, [Date ...

  5. python第一天---我要入个门

    """ 一个用户登录的案例 """ # 永远等待,直到用户输入值 # 变量 name_r = input("请输入用户名" ...

  6. Scala 类型参数

    介绍 类型参数是什么?类型参数其实就类似于Java中的泛型.先说说Java中的泛型是什么,比如我们有List a = new ArrayList(),接着a.add(1),没问题,a.add(&quo ...

  7. 【LEETCODE】33、LeetCode的Given a non-negative integer numRows, generate the first numRows of Pascal's triangle

    package y2019.Algorithm.array; import java.util.ArrayList; import java.util.List; /** * @ProjectName ...

  8. Vue.js源码全方位深入解析--学习笔记

    模板中的插入变量是如何渲染到DOM上的? initMixin(Vue)->_init->$options-> $mount()当执行该挂载方法时DOM变化 为什么可以通过this访问 ...

  9. 测试人员必须掌握的linu常用命令

    有些公司需要测试人员部署程序包,通过工具xshell. 现在我将总结下工作需要用到的最多的命令 ls                                显示文件或目录 pwd       ...

  10. 【转载】Sqlserver存储过程中使用Select和Set给变量赋值

    Sqlserver存储过程是时常使用到的一个数据库对象,在存储过程中会使用到Declare来定义存储过程变量,定义的存储过程变量可以通过Set或者Select等关键字方法来进行赋值操作,使用Set对存 ...