类与对象(上)
- 面向对象与面向过程
- 类的定义
- 类的实例化
- 类的访问限定符
- 类的对象的大小的计算
- 类成员函数的this指针
1.面向对象与面向过程
C语言是面向过程的,它关注的是过程,通过调用函数逐步解决问题
C++是由C语言发展而来的,与C兼容。它既可以用于面向过程的结构化程序设计,也可以用于面向对象的结构化程序设计。C++关注的是对象,靠对象之间的交互解决问题
ps:面向对象的四大特性:抽象、封装、继承以及多态
2.类的定义
2.1类的定义形式
类相当于用户自定义的一种数据类型
类中的元素为类的成员,可分为数据成员(成员变量/成员属性)和成员函数(成员方法)两种
例:
tips:与C语言中结构体相比较,类内既可以定义变量,也可以定义函数,而C语言结构体中只能定义变量
2.2类的定义方法
方法一:声明和定义全部放在类体
例:
注意:此时成员函数会被编译器当做内联函数处理
方法二:声明放在类体,定义放在类外
例:
在类外定义成员函数时,注意要在函数名前面加上类名::(其中::为作用域解析符)
3.类的实例化
用类类型创建对象的过程称为类的实例化
类是对象的抽象,而对象是类的具体实例
注意:类是抽象的,不占用内存,而对象是具体的,占用存储空间
4.类的访问限定符
类的访问限定符分为public(公有的)、private(私有的)以及protected(保护的)三种
对于public修饰的成员,可以在类外直接被访问,而对于private和protected修饰的成员,不可以在类外直接被访问
注意:
1.类的默认访问权限为private,而结构体默认访问权限为public
2.访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符的区别
5.类的对象的大小的计算
注意:每个对象所占用的存储空间只是该对象的数据成员所占用的存储空间,而不包括成员函数代码所占用的空间。成员函数被存放在公共代码段
一个类的对象的大小就是该类中数据成员大小之和,同时也要进行内存对齐
例:
注意:C++中,允许空类的存在,同时空类的大小为1个字节
6.类成员函数的this指针
C++编译器给每个非静态成员函数增加了一个隐藏的指针参数,让该指针指向当前对象,即函数运行时调用该函数的对象。在函数体中所有成员变量的操作,都是通过该指针访问的。该指针称为this指针
this指针的类型:类类型* const this
注意:this指针类型需加上const限定,以防止在函数实现中改变了当前对象(函数运行时调用该函数的对象)
this指针本质上是一个成员函数的形参,当对象调用成员函数时,将对象的地址作为实参传递给形参
注意:
1. 对象中并没有存储this指针
2. 用户不需要自己来传递指针地址,而是由编译器自动完成
3.当函数的形参名与成员变量重名时,可以在成员变量名前加上this限定来表示成员变量,而不是函数的形参