C++---类和对象
C++中面向对象的三大特征为:封装、继承、多态。
封装
封装的意义:
将属性和行为作为一个整体,表现生活中的事物
访问权限
公共权限 public 成员 类内可以访问 类外可以访问
保护权限 protect 成员 类内可以访问 类外不可以访问 儿子也可以访问父亲中的保护内容
私有权限 private 成员 类内可以访问 类外不可以访问 儿子不可以访问父亲的私有内容
构造函数和析构函数
这两个函数将会被编译器自动调用,完成对象的初始化和清理工作
构造函数:主要作用于创建对象时为对象的成员属性赋值,析构函数由编译器自动调用,无需手动调用
没有返回值也不写void
函数名称与类名相同
构造函数可以有参数,因此可以发生重载
程序在调用对象时候回自动调用构造函数,无需手动调用,而且只会调用一次
析构函数:主要作用域对象销毁前系统自动调用,执行一些清理工作
没有返回值不写void
函数名称与类名相同,在名称前加上符号~
析构函数不可以有参数,因此不可以发生重载
程序在对象销毁前会自动调用析构,无需手动调用,而且只会调用一次
构造函数的分类及调用
两种分类方式:
按参数分类:有参构造函数和无参构造函数
按类型分:普通构造函数和拷贝构造
//拷贝构造函数
Person(const Person &p) { //将传入的人身上的所有属性,拷贝到我身上 age=p.age; }
三种调用方式:
括号法
//括号法 Person p1;//默认构造函数调用 Person p2(10);//有参构造函数 Person p3(p2);//拷贝构造函数
显式法
//显式法 Person p1;//默认构造函数调用 Person p2=Person(10);//有参构造函数 Person p3=Person(p2);//拷贝构造函数
Person(10);//匿名对象 特点:当前执行结束后,系统会立即回收掉匿名对象
隐式转换法
Person p4=10;//相当于写了 Person p4=Person(10);
拷贝构造函数调用时机
使用一个已经创建完毕的对象来初始化一个新对象
Person p1(20); Person p2(p1);
值传递的方式给函数参数传值
void doWork(Person p) { } Person p; doWork(p);
以值方式返回局部对象
Person doWork() { Person p1; return p1; } Person p=doWork()
深拷贝和浅拷贝
浅拷贝:简单的赋值拷贝操作
问题:堆区的内存重复释放
浅拷贝的问题要利用深拷贝进行解决
深拷贝:在堆区重新申请空间,进行拷贝操作
初始化列表初始化属性
直接在创建构造函数时将属性进行初始化
Person():m_A(10),m_B(20),m_C(30) { }
当其他类对象作为本类成员,构造时候先构造类对象,再构造自身,析构的顺序与构造相反
浙公网安备 33010602011771号