前言
软件为visual studio2017,内容为C++学习笔记,以及相关的问题处理方法,目的是方便回顾和复习。
笔记来自于:黑马程序员C++教程。
- 生活中我们购买的电子产品都会有出厂设置(初始化),在某一天我们不用时候也会删除一些自己信息数据保证安全。
- C++中的面向对象来源于生活,每个对象都会有初始设置以及对象销毁前的清理数据的设置。
一、构造函数和析构函数
对象的初始化和清理也是两个非常重要的安全问题。
- 一个对象没有初始状态,对其使用效果是未知的
- 同样的使用完一个变量或对象,没有及时清理,也会造成一定的伤害。
- C++利用了构造函数和析构函数解决上述问题,这两个函数会被编译器自动调用,完成对象初始化和清理工作。
- 对象的初始化和清理工作是编译器强制我们要做的事情,因此如果我们不提供构造和析构,编译器会提供编译器提供的构造函数和析构函数来实现。
1.构造函数与析构函数的定义
- 构造函数:主要作用于创建对象时为对象的成员属性进行赋值,构造函数由编译器自动调用,无需手动调用。
- 析构函数:主要作用在于对象销毁前系统自动调用,执行一些清理工作。
2.构造函数语法 类名(){}
(1)构造函数,没有返回值‘’也不写void
(2)函数名称与类名相同
(3)构造函数可以有参数,因此可以发生重载
(4)程序在调用对象的时候会自动调用构造,无需手动调用,而且只会调用一次。
3.析构函数语法 ~类名(){}
(1)析构函数没有返回值也不写void
(2)函数名称与类名相同在前面添加~
(3)析构函数不可以有参数,因此不可以发生重载
(4)程序在对象销毁前会自动调用析构,无需手动调用,而且只会调用一次。
4.代码示例
(1)对象的初始化和清理
(2)构造函数进行对象的初始化
(3)析构函数用于对象的清理
(4)示例:
class Person {
public:
//1、定义构造函数
//函数没有返回值,没有void
//函数名与类名相同
//构造函数可以有参数,函数可以进行重载
//构造函数在创建对象时,析构函数会自动调用,而且只调用一次
//为了调用接口
Person() {
cout << "Person 构造函数的调用" << endl;
}
//2、使用析构函数进行对象的清理
//没有返回值 不写void
//函数名与类名相同,前面增加一个~
//析构函数不可以有参数,不可以发生重构
//对象在销毁前 会自动调用析构函数 而且只会调用一次
~Person() {
cout << "Person的析构函数调用" << endl;
}
};
//构造和析构都是必须有的实现,如果我们不提供,编译器会提供一个空实现的构造和析构
//空实现即编译器自己定义的函数,里面没有要执行的语句。
void test01() {
Person p1;//在栈上的数据,test01执行完毕后,会释放这个对象。
}
int main() {
//test01();//既有构造也有析构,由于执行的数据在栈区
Person p1;//只有在main()中的函数体都执行完了才释放这个对象
system("pause");
return 0;
}
二、构造函数的分类及调用
1.分类方式
(1)按着参数进行分类
分为有参构造和无参构造
(2)按类型进行分类
分为:普通构造和拷贝构造
2.调用方式
(1)括号法
(2)显示法
(3)隐式转换法
//构造函数的分类和调用
//1、分类
//按参数分类 有参构造和无参构造(默认构造)
//按着类型分类 普通构造 拷贝构造函数
class Person{
public:
Person() {
cout << "Person类的无参构造函数调用" << endl;
}
Person(int a) {
age = a;
cout<<"Person类的有参构造函数调用"<<endl;
}
//拷贝构造函数,将一个对象放进函数中
Person(const Person &p) {
//
//拷贝出一模一样的数据出来
//将对象Person p进行拷贝,为了防止数据被修改,使用const
cout << "Person类的拷贝构造函数调用" << endl;
age = p.age;
}
~Person() {
cout << "Person类的析构函数调用" << endl;
}
//定义公有属性
int age;
};
//调用
void test01(){
1、括号法调用,处理默认构造,在对象后面加()
//括号法更容易理解
//Person p1; // 默认构造函数调用。
//Person p2(10); //有参数构造函数调用
//Person p3(p2); //拷贝构造函数调用
注意事项
调用默认构造函数的时候,不要加()
因为下面这行代码,编译器会认为是一个函数的声明,而不会认为在创建对象。
Person p1();
//cout << "p2的年龄是:" <<p2.age<< endl;
//cout << "p3的年龄是:" << p3.age << endl;
//2、显示法调用,用等于号=
//构建对象后令其等于类名(参数/对象)
Person p1;
Person p2 = Person(10);//有参构造
Person p3 = Person(p2);//拷贝构造函数
//Person(10);//是匿名对象 特点:当前行执行结束后,系统会自动回收掉匿名对象。
cout &

本文是Visual Studio 2017下的C++学习笔记,详细讲解了构造函数和析构函数的定义、语法、调用方式,以及拷贝构造函数、深拷贝与浅拷贝、初始化列表、类对象作为类成员和静态成员等概念,旨在帮助理解C++中对象的初始化和清理过程。
最低0.47元/天 解锁文章
793

被折叠的 条评论
为什么被折叠?



