IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++类和对象(2):构造函数和析构函数 -> 正文阅读

[C++知识库]C++类和对象(2):构造函数和析构函数

注意:

  • 1.类的属性可以是另一个类;(定义类时注意)
  • 2.实现成员函数中:要使用“::”作用域符号,这样才能定义/实现成员函数,否则会报错;
  • 3.在实现函数.cpp和main.cpp中都要包含.h头文件,如果一个头文件中使用另一个类,也需要引用对应的头文件

对象的初始化和清理

构造函数和析构函数

在这里插入图片描述
在这里插入图片描述

C++提供了构造函数和析构函数完成对象初始化和清理工作;

  • 对象的初始化和清理工作是编译器强制要我们做的事情,因此如果我们不提供构造和析构函数,编译器会提供;但是**编译器提供的构造函数和析构函数时空实现的**——所以需要我们自己编写;
  • 构造函数主要作用在创建对象时为对象的成员赋值,构造函数有编译器自动调用,无需手动调用;
  • 析构函数主要作用在于对象销毁前系统自动调用,执行一些清理工作;
    在这里插入图片描述
    在这里插入图片描述
    - 构造函数和析构函数异同点:
    - 相同点:
    1.都没有返回值,也不用写void;
    2.函数名称都与类名一致(析构函数在名称钱加上符号-)
    3.都无需手动调用,由西东自动调用
    - 不同点:
    1.构造函数可以有参数,所以可以重载;而析构函数不可以有参数,因此不可以发生重载;
    2.构造函数在创建对象时自动调用;而析构函数在对象销毁前自动调用;
    因为要在外界调用构造函数和析构函数,所以给构造函数和析构函数的访问权限为public;
class Person
{
public:
	Person();
	~Person();

private:

};

Person::Person()
{
	cout << "自动调用构造函数"<<endl;
}

Person::~Person()
{
	cout << "自动调用析构函数"<<endl;
}

void test(){
	//在函数中创建的变量是存在栈区的,所以在函数结束后会自动清理
	Person p1;
}
int main() {
	test();
	//只会调用构造函数
	Person p2;	
	system("pause");	//暂停一下以便查看
	return 0;	//标准的返回退出
 }

在这里插入图片描述

构造函数的分类及调用:

  • 两种分类方式:
    1.按参数分为:有参构造和无参构造;
    2.按类型分为:普通构造和拷贝构造;
class Person {
public:
	int age;
	Person() {
		cout << "调用了无参构造函数"<<endl;
	}
	Person(int Age) {
		age = Age;
		cout << "调用了有参构造函数"<<endl;
	}
	Person(const Person &p) {
		//将传入的人身上的所有属性,拷贝到新创建的对象中;
		age = p.age;
		cout << "调用了拷贝构造函数"<<endl;
	}
};
int main() {
	Person p1;
	Person p2(10);
	Person p3(p2);
	cout <<"p3的年龄为:"<< p3.age << endl;
	system("pause");	//暂停一下以便查看
	return 0;	//标准的返回退出
 }

拷贝构造函数注意:参数为const Person &p——要用const进行锁定,防止对原对象进行修改;

  • 三种调用方式:
    1.括号法;
括号法:
	Person p1;
	Person p2(10);
	Person p3(p2);

在这里插入图片描述
注意事项:调用默认构造函数时,不要加()
因为Person p1( )代码,编译器会认为是一个函数的声明,不会认为在创建对象;
跟函数声明类似:void func();

2.显示法

显示法:
	Person p1;
	Person p2 = Person(10);	//有参构造
	Person p3 = Person(p2);  //拷贝构造
	cout <<"p3的年龄为:"<< p3.age << endl;

注意:

Person(10)——相当于一个匿名对象,然后给他取名字;
特点:当前行执行结束后,系统会立即回收掉匿名对象;

不要利用拷贝函数初始化匿名对象;编译器会认为Person(p3)等价于Person p3;相当于对象声明

3.隐式转换法(了解)

	Person  p4 = 10;	相当于写了Person p4 = Person(10);——有参构造函数
	Person  p5 = p4;	拷贝构造
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-17 11:49:20  更:2021-10-17 11:51:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:05:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码