【C++】面向对象模型 ① ( 面向对象设计 | 面向对象底层实现机制 | 程序内存结构 )
  K1I6GvxBEuyy 2023年11月02日 61 0



文章目录

  • 一、面向对象模型
  • 1、面向对象设计
  • 2、面向对象底层实现机制
  • 3、程序内存结构
  • 4、代码示例 - 对象内存结构测试







一、面向对象模型




1、面向对象设计



C++ 语言中 对 面向对象程序设计 的支持有 :

  • 封装 : 封装 静态 / 非静态 成员变量 / 成员函数
  • 继承 : 单继承 , 多继承 , 虚继承 ;
  • 多态 : 函数重载 ;
  • 对象的创建与回收 : 构造函数 , 析构函数 ;


2、面向对象底层实现机制



C 语言中 , 数据 ( 变量 ) 和 行为 ( 函数 ) , 是 分开声明 的 , 数据 和 行为 之间 没有 关联性 , C 语言中不支持 数据 和 行为 的 封装 ;

C++ 语言中 , 可以定义 " 抽象数据类型 " , 在 类 中可以定义 数据 ( 变量 ) 和 行为 ( 函数 ) , 将它们封装在一起 , 实现 数据 和 行为 的 绑定 , 二者是有 关联性 的 ;



C++ 对象模型 中的成员变量可以是

  • 公有的 : 可以直接被对象访问 ;
  • 私有的 : 只能被对象自身的成员函数访问 ;
  • 受保护的 : 只能被对象自身的成员函数和派生类访问 ;


C++ 中的 成员变量 有两种类型 :

  • 静态成员变量 : 使用 static 修饰的成员变量 ;
  • 非静态成员变量 : 就是 普通的成员变量 ;


C++ 中的 成员函数 有 3 种类型 :

  • 静态成员函数 : 使用 static 修饰的 成员函数 ;
  • 非静态成员函数 : 普通的 成员函数 ;
  • 虚函数 : 使用 virtual 修饰的 成员函数 ;


3、程序内存结构



计算机实际程序结构 : 从 计算机 程序执行角度分析 , 一个程序由 数据段 和 代码段 组成 ;

面向对象封装结构 : C++ 中的 面向对象 设计中 , 将 变量 和 函数 封装到一起 ;

C++ 编译器 需要处理 将 " 面向对象封装结构 " 转为 " 计算机实际程序结构 " 的 工作 ;



C++ 的 对象模型 描述了 C++ 如何组织和管理程序中的对象 , 包括了

  • 对象的内存布局
  • 成员变量的访问
  • 成员函数的调用
  • 虚函数机制等

多方面问题 ;



每个 C++ 类 实例对象 都有其自身的内存空间 , 包括 成员变量 和 成员函数 ;

成员变量是对象中的数据 , 成员函数是对象中的行为 ;



4、代码示例 - 对象内存结构测试



执行下面的代码示例 ,

所有的类的大小都是 12 字节 , 只有 3 个 int 类型成员变量 是类的大小 ,

可以看到 类 占用的内存大小 , 只与普通对象有关 , 静态成员变量 和 成员方法 , 都不在对象中定义 ;



代码示例 :

#include "iostream"
using namespace std;

class A
{
public:
    int a;
    int b;
    int c;
};

class B
{
public:
    int a;
    int b;
    int c;
    static int s;
};

class C
{
public:
    int a;
    int b;
    int c;
    static int s;

public:
    int fun() { return 4; };
    void fun2() {};
};

struct D
{
    int a;
    int b;
    int c;
};

struct E
{
    int a;
    int b;
    int c;
    static int s;
};

int main() {

    cout << " sizeof(A) = " << sizeof(A) << endl;
    cout << " sizeof(B) = " << sizeof(B) << endl;
    cout << " sizeof(C) = " << sizeof(C) << endl;
    cout << " sizeof(D) = " << sizeof(D) << endl;
    cout << " sizeof(E) = " << sizeof(E) << endl;
	

    // 控制台暂停 , 按任意键继续向后执行
    system("pause");

    return 0;
}

执行结果 :

sizeof(A) = 12
 sizeof(B) = 12
 sizeof(C) = 12
 sizeof(D) = 12
 sizeof(E) = 12
请按任意键继续. . .

【C++】面向对象模型 ① ( 面向对象设计 | 面向对象底层实现机制 | 程序内存结构 )_面向对象模型


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
K1I6GvxBEuyy
作者其他文章 更多