导图社区 面向对象编程:类
C语言面向对象编程第一节,类的基本知识。类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。赶快收藏学起来吧!
社区模板帮助中心,点此进入>>
面向对象编程:类
类和库的区别
类的定义
数据成员
成员函数
对象的定义
直接定义
动态申请
先定义一个指向类的指针
动态开一块内存
单个变量
数组
主动删除
单变量
引用对象
成员运算符
指针
初始化与扫尾
构造函数
特点
没有返回类型
名称必须与类名相同
有初始化列表
不能声明为const
种类
默认构造函数
不带参数的构造函数
若用户未声明构造函数,则由编译器自动生成,但是不进行任何操作
用户也可以自己显式的声明默认构造函数,此时编译器不在自动生成
用户定义的构造函数
带有默认参数的构造函数
当所有的参数都被指定了默认值之后,这个函数也可以不带参数
此时就会与默认构造函数出现冲突
总而言之,我们要做到如果在创建一个对象时,没有给出实参列表,编译器要知道调用那个构造函数
带有参数的构造函数
用户自己定义带有参数,且参数无默认值的构造函数
参数的个数不同,能够实现构造函数的重载
参数初始化列表
对数据成员初始化的两种方式
在构造函数函数体内赋值
对象构造过程
用构造函数初始化列表方式来初始化类中的数据成员
进入函数体,给类中的数据成员重新赋值,会覆盖初始化阶段数据成员的值
格式
在构造函数头与函数体之间,用冒号开始
用逗号隔开
在数据成员名后用圆括号将要赋的初值括起来
注意事项
类中const常量,必须在初始化列表中初始,不能使用赋值的方式初始化
复制构造函数
默认复制构造函数
函数原型:类名(const 类名&)
作用:生成一个与传来的参数一样的新对象
用户自定义复制构造函数
函数原型:类名(const 类名&){函数体}
作用:根据函数体内的语句进行生成操作
析构函数
名称:~类名()
无参数,无返回值
默认析构函数
编译器生成,不进行任何操作
用户自定义析构函数
原型:~类名(){函数体}
作用:一般是进行扫尾处理
const与类
常量数据成员
声明:在该数据成员声明前加保留字const
是属于对象的,在某一具体对象的生命周期内是常量,不能赋值
对于整个类,不同的对象的这一常量数据成员的值可以不同
初始化时只能用参数列表进行,不能用赋值语句
常量对象
声明:const 类名 对象名(实参表)
只能被初始化,不能赋值
常量成员函数
声明:函数头+const
不能改变数据成员,否则会编译报错
常量对象只能引用常量成员函数
静态成员
静态数据成员
是属于类的而非对象
调用方式
类名::静态数据成员名
对象.静态数据成员名
一个类不管创建了多少对象,它们的静态数据成员相同
它的定义是在定义类的时候而非定义对象的时候定义的
static 是类所有的,所以不会在构造函数里赋值,因此只有在类的实现文件里赋初值
静态成员函数
操作静态数据成员
静态常量数据成员
在类定义的时候初始化
static const 数据成员名
static 决定了其不在定义对象的时候构造
const 决定了其不能之后用=号赋值
友元
全局函数
友元函数
声明:friend 类型名 函数名
类函数
友元类
声明:friend class 类名
友元成员函数
声明:friend 类型名 其他类名::函数名
注意点
若要在A中声明B类或者B中某一成员函数为友元,则应该先声明A,在定义B,最后给出A的完整定义