一、面向对象模型
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
请按任意键继续. . .