类和对象(基础)

类的引入

在C语言中结果欧体只能定义变量,在C++中结构体不仅可以定义变量,也可以定义函数,但C++中一般使用class代替struct

类的定义

  • class 类名{};
  • 类中的元素称为类的成员:数据称为类的属性或成员变量,函数称为类的方法或成员函数

定义方式

  • 声明和定义全放在类中,成员函数如果在类中定义,编译器可能会将其当成内联函数处理
  • 声明放在.h文件中,定义放在.cpp文件中,一般采用此方式,定义时需要使用作用域解析符(::)说明成员属于哪个类域

访问限定符

  • public:可以在类外直接访问
  • private:类外不可以直接访问
  • protected:类外不可以直接访问,派生类可访问

特性

  • 访问权限作用域从该访问限定符出现的位置到下一个访问限定符位置
  • class默认访问权限是private,struct默认访问权限是public
  • 体现了封装性,封装就是将数据和操作方法进行有机结合,隐藏对象的属性和实现的细节,仅对外公开接口来和对象进行交互

类的实例化

  • 用类类型创建对象的过程称为类的实例化
  • 创建类对象有两种方法,一种是静态建立(类名 对象名;),一种是动态建立(类名 对象名 = new 类名;)
  • 类只是一个模型一样的东西,限定了有哪些成员,定义类并没有分配实际的内存空间来存储
  • 一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间,存储类的成员变量

类对象大小

  • 一个类的大小就是该类中成员变量之和,注意内存对齐,因为类对象只保存成员变量,成员函数放在公共的代码段
  • 对于空类,编译器用一个字节唯一标识这个类

this指针

C++编译器给每个成员函数(构造函数除外)增加了一个隐藏指针参数,该指针指向当前对象,在函数体重的所有成员变量的操作都是通过该指针去访问的

特性

  • this指针类型:类类型* const
  • this指针存在栈上
  • 只能在成员函数内部使用
  • this指针本质上是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this形参,所以对象不存储this指针
  • this指针是成员函数第一个隐含的指针形参,一般由编译器通过ecx寄存器自动传递,不需要用户传递