类和对象cpp
一、类和对象的基本概念
1.1结构化程序设计
程序=数据结构+算法
程序是由全局变量以及众多相互调用的函数组成
不足:函数和其操作的数据结构无直观联系
某个数据结构到底有哪些函数可以对它进行操作?某个函数到底是用来操作哪些数据结构
1.2面向对象程序设计
程序=类+类+类.....
归纳属性形成数据结构(多个变量描述事物的属性)
【抽象】归纳事物所能进行的行为形成一个个函数(函数用来操作数据结构)
【封装】将数据结构和操作该数据结构的函数捆绑形成一个“类”
【继承】【多态】
1.3类和对象
eg.写一个程序,输入矩形的长和宽,输出面积和周长
分析:矩形用一个类表示,属性是长和宽,因此需要两个变量分别表示长和宽
可以对矩形进行哪些操作?(设置长宽,算面积,算周长)这三种行为各用一个函数来实现,都会需要用到长和宽两个变量
通过类,可以定义变量。类定义出来的变量,也称为类的实例,就是所说的【对象】
类的名字就是用户自定义类型的名字,可以像使用基本类型那样来使用它
<对象的内存分配>和结构变量一样,对象所占用的内存空间大小,等于所有成员变量的大小之和
(对齐特殊情况另外讨论)(对象只包含成员变量,不包含成员函数)
<对象间的运算>和结构变量一样,对象之间可以用“=”进行赋值,但不能用“==”“!=”进行比较,除非这些运算符经过了【重载】
1.4类的使用方法
【使用类的成员变量和成员函数】
用法1:对象名.成员名
用法2:指针->成员名
用法3:引用名.成员名
1.5类的成员函数定义
【类的成员函数和类的定义分开写】
(截到人脸郭老师orz
【注意这里的::表示不是全局函数,而是一个类的成员函数】
1.6类成员的可访问范围
如果某个成员前面没有上述关键字,则被默认为私有成员
eg,
1.7私有成员变量的隐藏
设置私有成员的机制叫【隐藏】
隐藏的目的是强制对成员变量的访问一定要通过成员函数进行,那么以后成员变量的类型等属性修改后,只需要更改成员函数即可。否则所有直接访问成员变量的语句都要修改
1.8成员函数的重载 及参数缺省
【成员函数重载的基本规则】
函数名相同:所有重载版本的函数必须有相同的名称。
参数列表不同:至少有一个重载版本的参数列表与其它版本不同。参数列表的不同可以体现在参数的数量、类型或顺序上。
返回类型不作为重载依据:仅返回类型不同不足以构成重载。即如果两个函数除了返回类型外其他都相同,则它们不能被重载。
【函数参数缺省(默认参数)】指的是在函数声明或定义时为函数的某些参数指定一个默认值。如果调用函数时没有提供对应的参数值,则使用默认值。
默认参数的基本规则
只能在声明或定义的一个地方指定默认值:一旦某个参数被赋予了默认值,那么它后面的所有参数也必须要有默认值。
从右向左进行赋值:默认参数必须从右向左开始设置,即如果一个参数具有默认值,那么其右侧的所有参数也必须具有默认值。
作用域问题:默认参数只在函数调用时起作用,并且默认值是在编译时期确定的。
1.9构造函数
1.9.1基本概念:
1)成员函数的一种,名字与类名相同,可以有参数,但不可以有返回值(void也不行)
2)作用是对 【对象】进行初始化,给成员变量赋初值
3)如果定义类时没写构造函数,则编译器生成一个默认的无参数的构造函数(默认构造函数无参数,不做任何操作
4)对象生成时构造函数自动被调用,对象一旦生成,就再也不能在其上执行构造函数
5)一个类可以有多个构造函数