专业编程基础技术教程

网站首页 > 基础教程 正文

C/C++编程笔记:编译器何时在C++中创建默认值并复制构造函数?

ccvgpt 2024-10-12 13:50:41 基础教程 7 ℃

在C ++中,编译器创建一个默认的构造函数,如果我们不定义自己的构造函数。编译器创建的默认构造函数的主体为空,即,它不会为数据成员分配默认值(在Java中,默认构造函数会分配默认值)。

如果我们不编写自己的副本构造函数,则编译器还会创建一个副本构造函数。与默认构造函数不同,编译器创建的复制构造函数的主体不为空,它会将传递的对象的所有数据成员复制到正在创建的对象中。

C/C++编程笔记:编译器何时在C++中创建默认值并复制构造函数?

当我们仅编写副本构造函数时会发生什么-编译器会创建默认构造函数吗?

如果我们编写任何构造函数,即使它是复制构造函数,编译器也不会创建默认构造函数。例如,以下程序无法编译。

#include <iostream>

using namespace std;

class Point

{

int x, y;

public:

Point(const Point &p) { x = p.x; y = p.y; }

};

int main()

{

Point p1; // COMPILER ERROR

Point p2 = p1;

return 0;

}

输出:编译器错误:没有匹配的函数可以调用'Point :: Point()

反向怎么样–当我们编写普通的构造函数而不编写副本构造函数时会发生什么?

反向是不正确的。如果我们不编写自己的副本,则编译器会创建一个副本构造函数。即使我们在类中编写了其他构造函数,编译器也会创建它。例如,下面的程序运行正常。

#include <iostream>

using namespace std;

class Point

{

int x, y;

public:

Point(int i, int j) { x = 10; y = 20; }

int getX() { return x; }

int getY() { return y; }

};

int main()

{

Point p1(10, 20);

Point p2 = p1; // This compiles fine

cout << "x = " << p2.getX() << " y = " << p2.getY();

return 0;

}

输出:

x = 10 y = 20

因此,我们需要写的拷贝构造函数。

以上就是今天的全部内容了。每日分享小知识,希望对你有帮助~

另外如果你想更好地提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~

编程学习书籍分享:

编程学习视频分享:

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

点击下方【了解更多】获取更多免费学习资料帮助你学习成长哦~

最近发表
标签列表