首先我们随意定义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. Ubuntu bashrc profile environment 区别

    在 Ubuntu 中有如下几个文件可以设置环境变量: /etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. ...

  2. 剑指offer54:字符流中第一个不重复的字符

    1 题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中 ...

  3. NOP法破解

    目录 步骤 步骤 OD载入目标软件,汇编窗口右键搜索字符串,发现错误类提示字符串,双击该字符串来到该段代码位置. 向上寻找到跳转到本段错误提示代码的跳转指令,用NOP指令填充跳转指令. 保存修改后的代 ...

  4. Linux 服务器修改时间与时间同步

    设置时间 date --set '2015-11-23 0:10:40' # 方法一,通用 timedatectl set-time '2015-11-23 08:10:40' # 容器内可能不支持 ...

  5. 括号匹配问题 —— Deque双端队列解法

    题目: 给定一个只包括 '(',')','{','}','[',']'?的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可 ...

  6. 使用VS2012编译和使用C++ STL(STLport)

    使用VS2012编译和使用C++ STL(STLport) http://cstriker1407.info/blog/use-vs2012-to-compile-and-use-the-c-stl- ...

  7. logback配置文件模板

    <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false ...

  8. sql将查询结果的某个字段赋值给另一个字段

    Update a set a.NickName=b.name FROM AccountsInfo a, TT b where a.UserID=b.userId 必须要有关联的两个表

  9. 十三、细说NULL导致的神坑,让人防不胜防

    当数据的值为NULL的时候,可能出现各种意想不到的效果,让人防不胜防,我们来看看NULL导致的各种神坑,如何避免? 一.比较运算符中使用NULL 任何值和NULL使用运算符(>.<.> ...

  10. hashmap,hashtable,concurrenthashmap多线程下的比较(持续更新)

    1.hashMap 多线程下put会造成死循环,主要是扩容时transfer方法会造成死循环. http://blog.csdn.net/zhuqiuhui/article/details/51849 ...