本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段:基础篇、STL 篇、高阶数据结构与算法篇,相关重点内容如下:
- 基础篇:类与对象(涉及C++的三大特性等);
- STL 篇:学习使用 C++ 提供的 STL 相关库;
- 高阶数据结构与算法篇: 手动实现自己的 STL 库 及 设计实现高阶数据结构,如 B树、B+树、红黑树等。
学习集:
- C++ 入门到入土!!!学习合集
- Linux 从命令到网络再到内核!学习合集
本期内容:C++ 类的基本成员函数:拷贝构造函数(概念、特征)及其基本写法与调用
目录:
1. 拷贝构造函数的概念
2. 拷贝构造函数的特征及注意点说明
3. 简单写法及调用写法
4. 典型使用场景
5. 相关文章推荐
【 C++学习合集链接 】
1. 拷贝构造函数的认识
拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。
作用:拷贝一个对象!【使用已存在对象创建新对象】
2. 拷贝构造函数的特征及注意点说明
拷贝构造函数是构造函数的一个重载形式。
拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错,因为会引发无穷递归调用。(传值的方式就是一种拷贝构造,由此会引发反复套娃引发无穷递归)
例如一个日期类的示例:> 3. 若未显式定义,编译器会生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。 在编译器生成的默认拷贝构造函数中,内置类型是按照字节方式直接拷贝的,而自定义类型是调用其拷贝构造函数完成拷贝的。> 4. 类中如果没有涉及资源申请时,拷贝构造函数是否写都可以;一旦涉及到资源申请时,则拷贝构造函数是一定要写的,否则就是浅拷贝。(会程序崩溃)
3. 简单写法及调用写法
代码示例
#include<iostream>
using std::cout;
using std::endl;
class Date {
public:
Date(int year = 1970, int month = 1, int day = 1) {
_year = year;
_month = month;
_day = day;
}
/* 拷贝构造函数 */
Date(const Date& d) { // 注意添加 const 方式出现写错导致拷贝出错
_year = d._year;
_month = d._month;
_day = d._day;
}
void Print() {
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
int main() {
Date d1(2023, 5, 23);
Date d2(d1); // 第一种写法:函数调用式的写法
Date d3 = d1; // 第二种写法:类似内置数据类型的赋值形式
d1.Print();
d2.Print();
d3.Print();
return 0;
}
4. 典型使用场景
- 使用已存在对象创建新对象。
- 函数参数类型为类类型对象。
- 函数返回值类型为类类型对象。
举例 1:
自定义实现了栈,栈是不可逐个访问遍历元素的,但是若一定要遍历元素,一般思路:反复获取栈顶元素 + 删除栈顶元素!
为了保留原数据,我们可以拷贝当前的这个栈对象,用拷贝的对象执行上述的操作,实现元素遍历!
举例 2:如下
#include<iostream>
using std::cout;
using std::endl;
class Date
{
public:
Date(int year, int minute, int day)
{
cout << "Date(int,int,int):" << this << endl;
}
Date(const Date& d)
{
cout << "Date(const Date& d):" << this << endl;
}
~Date()
{
cout << "~Date():" << this << endl;
}
private:
int _year;
int _month;
int _day;
};
Date Test(Date d)
{
Date temp(d);
return temp;
}
int main()
{
Date d1(2022, 1, 13);
Test(d1);
return 0;
}
文章来源:https://www.toymoban.com/news/detail-473817.html
5. 相关文章推荐
1. C++ 学习 ::【基础篇:12】:C++ 类的基本成员函数:构造函数基本的定义与调用 |(无参构造与有参构造及缺省参数式构造)
2. C++ 学习 ::【基础篇:13】:类的基本成员函数:类类型成员与构造函数问题
3. C++ 学习 ::【基础篇:14】:C++ 类的基本成员函数:析构函数的作用 及 自定义析构函数情形
4. C++ 学习 ::【基础篇:15】:C++ 类的基本成员函数:析构顺序问题(全局/静态/局部量) 及 类类型(自定义类型)与析构函数 文章来源地址https://www.toymoban.com/news/detail-473817.html
到了这里,关于C++ 学习 ::【基础篇:16】:C++ 类的基本成员函数:拷贝构造函数(认识、特征、注意点及典型使用场景)及其基本写法与调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!