首先我们随意定义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. HTTP权威指南-报文与状态码

    所有的报文都向下流动 报文流向 报文组成 HTTP方法 状态码 GET示例 HEAD示例 100~199 信息性状态码 200~299 成功状态码 300~399重定向状态码 400~499 客户端错 ...

  2. linux服务器安装tomcat

    linux服务器安装tomcat 准备: 下载一个tomcat,官网连接:http://tomcat.apache.org/ 版本选择合适的 安装tomcat之前要先安装Java jdk 可以参考我的 ...

  3. Django REST framework 基本组件

    一.序列化组件 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如json之类的表示形式的方式.我们可以通过声明与Django forms ...

  4. Git学习(二)——使用Git协同开发

    项目协同开发git操作 基本流程 1.开发前,拉一次远程仓库 2.工作区进行开发 3.将开发结果提交到本地版本库 git status查看时没有待处理的事件 4.拉取远程仓库(每一次要提交远程仓库前必 ...

  5. fabric.js 知识点整理

    fabric.js是一个很好用的 canvas 操作插件,下面整理了一些平时项目中用到的知识点: //1: 获得画布上的所有对象: var items = canvas.getObjects(); / ...

  6. SPA项目首页导航+左侧菜单

    Mock.js是个啥 前后端分离之后,前端迫切需要一种机制,不再需要依赖后端接口开发,而今天的主角mockjs就可以做到这一点 Mock.js是一个模拟数据的生成器,用来帮助前端调试开发.进行前后端的 ...

  7. MAMP PRO 在osx 10.10 错误处理

    新更新的osx10.10之后,启动MAMP会发现Apache无法启动, 处理如下: 1.cd /Applications/MAMP/Library/bin 2.mv envvars _envvars ...

  8. Educational Codeforces Round 64 (Div. 2)

    A.3*3讨论即可,注意正方形套圆套三角形只有6个点. #include<cstdio> #include<cstring> #include<iostream> ...

  9. Docker学习笔记导航帖

    1. Docker安装 安装docker https://www.cnblogs.com/kreo/p/10813010.html

  10. MySQL性能测试调优

    MySQL性能测试调优 操作系统 基本操作 查看磁盘分区mount选项 $ mount 永久修改分区mount选项(系统重启后生效) 修改文件 /etc/fstab 中对应分区的mount optio ...