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





一、面向对象模型




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
请按任意键继续. . .

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/133210850