拷贝构造函数到底是个是什么东西?

本文通过一个具体的C++示例,介绍了拷贝构造函数的概念及其使用场景。文章演示了如何定义一个包含拷贝构造函数的类,并展示了如何利用拷贝构造函数来初始化新的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的理解是,拷贝构造函数是用来用一个对象作为参数去初始化另一个对象。


#include <iostream>
using namespace std;

class Foo//创建一个类,类名为Foo
{
public:
	Foo()//无参构造函数
	{
		cout<<"create Foo"<<endl;
	}

															//explicit 防止单参数的时候被用于自动类型转换
	explicit Foo(int a)//单参构造函数
	{
		m_ia=a;
		cout<<"create Foo"<<endl;
	}

															//const 可以避免奇怪的东西改变参数															//参数类型是类本身的引用
	Foo(const Foo& temp)//拷贝构造函数
	{
		m_ia=temp.m_ia;
		cout<<"create Foo copy"<<endl;
	}

	~Foo()	//析构函数
	{
		cout<<"destruction Foo"<<endl;
		system("pause");//便于在程序执行完毕之后看到析构函数的效果
	}

	void print_a()	//打印成员变量
	{
		cout<<m_ia<<endl;
	}
private:
	int m_ia;//成员变量
};


int main()
{
	Foo foo(2);//创建一个对象1,并带参数
	Foo fooo(foo);	//创建另一个对象2,并带参数,参数是对象1

	fooo.print_a();	//打印对象2的成员变量

	return 0;

}

### C++ 的定义、作用及特点 #### 1. C++ 的定义 C++ 是一种通用的编程语言,它在 C 语言的基础上扩展了面向对象编程(OOP)的功能。C++ 支持多种编程范式,包括过程化编程、面向对象编程和泛型编程[^1]。 #### 2. C++ 的作用 C++ 被广泛应用于需要高性能和高效率的领域,例如系统软件开发、游戏开发、嵌入式系统、机器人技术等。由于其跨平台特性,C++ 可以编译成适用于 Windows、Linux 和 macOS 等多种操作系统的可执行文件[^1]。 #### 3. C++ 的特点 以下是 C++ 的一些关键特点: - **跨平台性**:C++ 代码可以在不同平台上编译和运行。例如,在 Windows 上可以使用 MinGW 或 Visual Studio 编译器,在 Linux 上可以使用 GCC 编译器[^1]。 - **面向对象编程支持**:C++ 提供了类和对象的支持,允许开发者通过封装、继承和多态等机制构建复杂的程序结构。这使得代码更加模块化和易于维护[^4]。 - **智能指针**:为了解决内存管理问题,C++ 引入了智能指针的概念。智能指针是一种特殊的指针类型,能够自动管理动态分配的内存,防止内存泄漏。常见的智能指针包括 `std::unique_ptr` 和 `std::shared_ptr`。例如,以下代码展示了如何使用 `std::unique_ptr`: ```cpp auto str = std::make_unique<std::string>("my string"); ``` 智能指针的作用是通过引用计数或其他机制确保资源在不再需要时被正确释放[^2]。 - **构造函数与析构函数**:C++ 提供了构造函数和析构函数来初始化和清理对象。构造函数可以有三种写法:默认构造函数、带参数的构造函数和拷贝构造函数。如果未正确实现深拷贝,可能会导致多个对象共享同一块内存的问题[^4]。 - **头文件保护机制**:为了防止头文件被多次包含,C++ 提供了两种常见的保护机制:`#ifndef` 和 `#pragma once`。例如,以下代码展示了 `#pragma once` 的用法: ```cpp #pragma once // 声明、定义语句 ``` 这种机制可以避免重复定义问题,提高编译效率[^3]。 #### 示例代码:简单的 C++ 程序 以下是一个简单的 C++ 程序示例,展示了如何使用类和构造函数: ```cpp #include <iostream> #include <string> class Person { public: std::string name; int age; // 构造函数 Person(std::string n, int a) : name(n), age(a) {} // 成员函数 void introduce() const { std::cout << "Hello, my name is " << name << " and I am " << age << " years old." << std::endl; } }; int main() { Person p("Alice", 30); p.introduce(); return 0; } ``` ### 总结 C++ 是一种功能强大且灵活的编程语言,具有跨平台性、面向对象编程支持、智能指针和高效的内存管理机制等特点。这些特性使得 C++ 在许多高性能应用领域中占据重要地位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值