我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++类中三大函数是什么及怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++类中三大函数是什么及怎么使用

本篇内容介绍了“C++类中三大函数是什么及怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一.构造函数

1.构造函数的作用

我们在创建好类的对象之后,首先对它的每一个成员属性赋值之后再对它们进行输出操作,如果不赋值就输出,这些值就会是垃圾值。而为了代码的简介,一次性为所有成员属性初始化,C++的类提供了这样的一个函数—构造函数。

2.构造函数的语法 类名(){}

1)构造函数,没有返回值也不写void

2) 函数名称与类名相同

3)构造函数可以有参数,因此可以发生重载

4)程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次

二.析构函数

1.析构函数的作用

析构函数的作用与构造函数相反,一般是执行对象的清理工作,当对象的生命周期结束的时候,会自动的调用。析构函数的作用并不是删除对象,在对象撤销它所占用的内存之前,做一些清理的工作。清理之后,这部分内存就可以被系统回收再利用了。在设计这个类的时候,系统也会默认的提供一个析构函数。在对象的生命周期结束的时候,程序就会自动执行析构函数来完成这些工作。同构造函数,用户自己定义,系统自动调用。

2.析构函数的语法~类名(){}

1)析构函数,没有返回值也不写void

2) 函数名称与类名相同,在名称前加上符号 ~

3)析构函数不可以有参数,因此不可以发生重载

4) 程序在对象销毁前会自动调用析构,无须手动调用,而且只会调用一次

代码演示:

class Person{  public:  //构造函数  Person() {  cout << "Person的构造函数调用" << endl; }//析构函数~Person() {   cout << "Person的析构函数调用" << endl; }};void test01(){  Person p;}int main() {   test01();   system("pause");   return 0; }

三.构造函数的分类及调用

1.两种分类方式:

按参数分为: 有参构造和无参构造

按类型分为: 普通构造和拷贝构造

2.三种调用方式:

括号法

显示法

隐式转换法

//1、构造函数分类// 按照参数分类分为 有参和无参构造 无参又称为默认构造函数// 按照类型分类分为 普通构造和拷贝构造class Person {public: //无参(默认)构造函数Person() {cout << "无参构造函数!" << endl;} //有参构造函数Person(int a) {age = a;cout << "有参构造函数!" << endl;} //拷贝构造函数Person(const Person& p) {age = p.age;cout << "拷贝构造函数!" << endl;} //析构函数~Person() {cout << "析构函数!" << endl;} public:int age;}; //2、构造函数的调用//调用无参构造函数void test01() {Person p; //调用无参构造函数} //调用有参的构造函数void test02() {//2.1 括号法,常用Person p1(10);//注意1:调用无参构造函数不能加括号,如果加了编译器认为这是一个函数声明//Person p2(); //2.2 显式法Person p2 = Person(10);Person p3 = Person(p2);//Person(10)单独写就是匿名对象 当前行结束之后,马上析构 //2.3 隐式转换法Person p4 = 10; // Person p4 = Person(10);Person p5 = p4; // Person p5 = Person(p4);//注意2:不能利用 拷贝构造函数 初始化匿名对象 编译器认为是对象声明//Person p5(p4);}int main() {test01();//test02();system("pause");return 0;}

四.拷贝构造函数调用时机

C++中拷贝构造函数调用时机通常有三种情况

1.使用一个已经创建完毕的对象来初始化一个新对象

2.值传递的方式给函数参数传值

3.以值方式返回局部对象

class Person {public:Person() {cout << "无参构造函数!" << endl;mAge = 0;}Person(int age) {cout << "有参构造函数!" << endl;mAge = age;}Person(const Person& p) {cout << "拷贝构造函数!" << endl;mAge = p.mAge;}//析构函数在释放内存之前调用~Person() {cout << "析构函数!" << endl;}public:int mAge;};//1. 使用一个已经创建完毕的对象来初始化一个新对象void test01() {Person man(100); //p对象已经创建完毕Person newman(man); //调用拷贝构造函数Person newman2 = man; //拷贝构造//Person newman3;//newman3 = man; //不是调用拷贝构造函数,赋值操作}//2. 值传递的方式给函数参数传值//相当于Person p1 = p;void doWork(Person p1) {}void test02() {Person p; //无参构造函数doWork(p);}//3. 以值方式返回局部对象Person doWork2(){Person p1;cout << (int *)&p1 << endl;return p1;}void test03(){Person p = doWork2();cout << (int *)&p << endl;}int main() {//test01();//test02();test03();system("pause");return 0;}

五.构造函数调用规则

默认情况下,c++编译器至少给一个类添加3个函数

1.默认构造函数(无参,函数体为空)

2.默认析构函数(无参,函数体为空)

3.默认拷贝构造函数,对属性进行值拷贝

构造函数调用规则如下:

如果用户定义有参构造函数,c++不在提供默认无参构造,但是会提供默认拷贝构造

如果用户定义拷贝构造函数,c++不会再提供其他构造函数

class Person {public://无参(默认)构造函数Person() {cout << "无参构造函数!" << endl;}//有参构造函数Person(int a) {age = a;cout << "有参构造函数!" << endl;}//拷贝构造函数Person(const Person& p) {age = p.age;cout << "拷贝构造函数!" << endl;}//析构函数~Person() {cout << "析构函数!" << endl;}public:int age;};void test01(){Person p1(18);//如果不写拷贝构造,编译器会自动添加拷贝构造,并且做浅拷贝操作Person p2(p1);cout << "p2的年龄为: " << p2.age << endl;}void test02(){//如果用户提供有参构造,编译器不会提供默认构造,会提供拷贝构造Person p1; //此时如果用户自己没有提供默认构造,会出错Person p2(10); //用户提供的有参Person p3(p2); //此时如果用户没有提供拷贝构造,编译器会提供//如果用户提供拷贝构造,编译器不会提供其他构造函数Person p4; //此时如果用户自己没有提供默认构造,会出错Person p5(10); //此时如果用户自己没有提供有参,会出错Person p6(p5); //用户自己提供拷贝构造}int main() {test01();system("pause");return 0;}

六.深拷贝与浅拷贝

浅拷贝:简单的赋值拷贝操作

深拷贝:在堆区重新申请空间,进行拷贝操作

示例:

class Person {public://无参(默认)构造函数Person() {cout << "无参构造函数!" << endl;}//有参构造函数Person(int age ,int height) {cout << "有参构造函数!" << endl;m_age = age;m_height = new int(height);cout << "拷贝构造函数!" << endl;//如果不利用深拷贝在堆区创建新内存,会导致浅拷贝带来的重复释放堆区问题m_age = p.m_age;m_height = new int(*p.m_height)}//拷贝构造函数Person(const Person& p) {;}//析构函数~Person() {cout << "析构函数!" << endl;if (m_height != NULL){delete m_height;}}public:int m_age;int* m_height;};void test01(){Person p1(18, 180);Person p2(p1);cout << "p1的年龄: " << p1.m_age << " 身高: " << *p1.m_height << endl;cout << "p2的年龄: " << p2.m_age << " 身高: " << *p2.m_height << endl;}int main() {test01();system("pause");return 0;}

“C++类中三大函数是什么及怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++类中三大函数是什么及怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++类中三大函数是什么及怎么使用

本篇内容介绍了“C++类中三大函数是什么及怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一.构造函数1.构造函数的作用我们在创建好类
2023-07-05

C++类中const修饰的成员函数及日期类怎么使用

这篇文章主要介绍“C++类中const修饰的成员函数及日期类怎么使用”,在日常操作中,相信很多人在C++类中const修饰的成员函数及日期类怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++类中co
2023-07-05

c语言中三次方的函数是什么

c语言中求三次方的函数是 pow(),原型为:double pow(double base, double exponent)。其中 exponent 固定为 3,base 为待求三次方的数字。C 语言中的三次方函数C 语言中用于计算三次
c语言中三次方的函数是什么
2024-04-27

php递归函数是什么及怎么使用

本篇内容主要讲解“php递归函数是什么及怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php递归函数是什么及怎么使用”吧!在php中,递归函数指的是自调用函数,也就是函数在函数体内部直接
2023-06-30

C++中string库函数的作用是什么和怎么使用

本文小编为大家详细介绍“C++中string库函数的作用是什么和怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中string库函数的作用是什么和怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-06-30

C++类、对象、构造函数及析构函数怎么定义使用

这篇文章主要介绍“C++类、对象、构造函数及析构函数怎么定义使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++类、对象、构造函数及析构函数怎么定义使用”文章能帮助大家解决问题。C++类与对象C
2023-07-06

C++类与封装的概念是什么及怎么使用

这篇文章主要介绍“C++类与封装的概念是什么及怎么使用”,在日常操作中,相信很多人在C++类与封装的概念是什么及怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++类与封装的概念是什么及怎么使用”的疑
2023-06-30

怎么使用C++函数类型与重载函数

本篇内容介绍了“怎么使用C++函数类型与重载函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.首先对重载函数,明确函数的返回类型不能决定
2023-06-25

c语言中回调函数的使用方法及作用是什么

本篇内容介绍了“c语言中回调函数的使用方法及作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录前言一、通过这节课程你能掌握以下知识
2023-06-20

C++类和对象中友元函数怎么使用

这篇文章主要介绍“C++类和对象中友元函数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++类和对象中友元函数怎么使用”文章能帮助大家解决问题。友元用到关键字 friend浅解概念举一个非
2023-07-02

C#中+=是什么及如何使用

这篇“C#中+=是什么及如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#中+=是什么及如何使用”文章吧。C#中+=
2023-07-05

C语言类型转换的作用是什么及怎么使用

这篇“C语言类型转换的作用是什么及怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言类型转换的作用是什么及怎么使用
2023-06-30

python str()函数的功能是什么及怎么使用

Python的`str()`函数用于将其他类型的变量转换为字符串类型。使用方法如下:```str(value)```其中,`value`是需要转换为字符串的变量。示例:```pythonnum = 123print(str(num)) #
2023-09-21

C++中类的转换函数怎么用

今天小编给大家分享一下C++中类的转换函数怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。只有接受一个参数(其他参数有默
2023-06-29

C++中CreateFile函数怎么使用

在C++中使用CreateFile函数来创建或打开一个文件,需要遵循以下步骤:1. 包含头文件:```cpp#include ```2. 定义文件句柄变量:```cppHANDLE hFile;```3. 调用CreateFile函数:``
2023-09-26

C++中GetAsyncKeyState函数怎么使用

GetAsyncKeyState函数用于获取指定虚拟键的状态。它的声明如下:```cppSHORT WINAPI GetAsyncKeyState(int vKey);```该函数的参数vKey是一个整数,表示要获取状态的虚拟键码。函数返回
2023-09-29

C++中releasedc函数怎么使用

在C++中,ReleaseDC函数用于释放设备上下文环境(Device Context,DC)。它的使用方法如下:首先,需要获取到需要释放的设备上下文环境的句柄。调用ReleaseDC函数,将设备上下文环境句柄作为参数传递给它。下面是一个示
C++中releasedc函数怎么使用
2024-02-29

C++ 中函数指针的使用方法是什么?

函数指针是一种指向函数的指针,用于实现回调、匿名函数和泛型编程。语法:returntype (*functionname)(parameterlist)。使用:声明一个指向所需函数类型的指针,并使用像其他指针一样使用函数指针。实战案例:实现
C++ 中函数指针的使用方法是什么?
2024-04-12

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录