【C++】类和对象概念及定义

时间:2024-03-27 21:04:31
  • 类和对象的定义

面向对象面向对象是一种程序设计范型,同时也是程序开发的一种方法。
对象是指类的实例,将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
【C++】类和对象概念及定义
需要明确的是:C语言是面向过程语言,而C++不是纯粹的面向对象语言,而是基于面向对象的语言,因为C++包含C语言的部分。

面向对象的三大特性:封装、继承、多态

三种访问限定符:public(公有)、protected(保护)、private(私有)
  1. public成员可以从类外部直接访问,private可以被派生类的函数调用,private和protected成员都不能从类外访问
  2. 每个限定符在类体中可使用多次,作用域是从限定符出现开始到下一限定符之前或类体结束前
  3. 类体中如果没有定义限定符,编译器会默认为protected(结构体默认为public)
  4. 类的访问限定符体现了面向对象的封装性

类的作用域分为局部域、全局域、类域、名字空间域四种
  1. 每个类都有自己的作用域,类的成员(成员函数、成员变量)都在类的作用域中,成员函数内可任意访问成员变量和其他成员函数
  2. 对象可以通过,直接访问公有成员,指向对象的指针通过 -> 也可以直接访问对象的公有成员
  3. 在类体外定义成员,需要使用 :: 作用域解析符指明成员属于哪个类域

  • 类类型的声明

class 类名
{
  private:
    私有变量和成员函数;
  public:
    公有变量和函数;
};

例:
【C++】类和对象概念及定义
声明对象的方法有三种:先声明类类型,再定义对象;在声明类型的同时定义对象;不出现类名,直接定义对象。

  • 成员函数的定义和声明

  1. 在类内定义成员函数
Class Student
{
private:
     int age;
     char sex;
public:
     void display()
     {
          cout << "Age is:" << age << endl;
          cout << "Sex is:" << sex << endl;
     }
};
  1. 在类外定义成员函数
class Student
{
private:
     int age;
     char* sex;
     char* name;
public:
     void display();
};
void Student::display()
{
     cout << age << "-" << sex << "-" << name << endl;
}

类内和类外定义有什么区别呢?
  1. 类内定义:在函数调用的时候编译器会当做内联函数处理,在调用点将代码展开
  2. 类外定义:函数调用时和普通函数一样进行栈帧的开辟和回退。

具体的在后面内联函数会详细解释。

  • 类实例化对象

  1. 类只是模型式的,限定了类的成员,定义出一个类,但是并没有分配出实际的内存空间来存储它
  2. 一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间存储类的成员变量
  3. 类就像建筑设计图,只有设计,实例化出的对象才是建筑物,能实际存储数据,占用物理空间。

  • 类对象存储模型

所以每个对象的大小为类中所有成员变量的大小之和,也遵循对齐原则。
【C++】类和对象概念及定义
结构体内存对齐规则:
  1. 第一个成员在与结构体变量偏移量为0的地址处
  2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处
  3. 结构体总大小为最大对齐数(每个成员变量除了第一个成员都有一个对齐数)的整数倍
  4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

class和C语言中的struct看起来很相似,但其实不同:
  1. struct Node是一个类型,在C语言中这样定义struct Node a;定义了一个结构体类型的a变量;在C++中,结构体定义对象可以写成Node a
  2. 空的结构体在C语言中编译通不过,会报错;在C++中可以得到大小为1,在Linux环境下大小为0;空的类(C++)大小也为1。

相关文章