欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > C++中的构造器(Constructor)(也称为构造函数)

C++中的构造器(Constructor)(也称为构造函数)

2025/2/5 0:16:40 来源:https://blog.csdn.net/luotuo28/article/details/145413306  浏览:    关键词:C++中的构造器(Constructor)(也称为构造函数)

在C++中,构造器(Constructor)也称为构造函数,它是一种特殊的成员函数,用于在创建对象时初始化对象的数据成员。以下是关于C++构造器的详细介绍:

构造函数的特点

  1. 名称与类名相同:构造函数的名称必须与它所属的类的名称完全相同。
  2. 没有返回类型:构造函数不声明返回类型,甚至连void也不允许。
  3. 自动调用:当创建类的对象时,构造函数会被自动调用。

构造函数的分类

1. 默认构造函数

默认构造函数是一种不带任何参数的构造函数。如果类中没有显式定义任何构造函数,编译器会自动提供一个默认构造函数,这个默认构造函数不执行任何操作。一旦你定义了自己的构造函数,编译器就不会再提供默认构造函数。

示例代码

#include <iostream>class MyClass {
public:// 默认构造函数MyClass() {std::cout << "Default constructor called" << std::endl;}
};int main() {MyClass obj; // 创建对象时自动调用默认构造函数return 0;
}

代码解释

  • MyClass类中定义了一个默认构造函数,它会在创建MyClass对象时自动调用,并输出一条信息。
2. 带参数的构造函数

带参数的构造函数允许在创建对象时传递初始值,从而对对象的数据成员进行初始化。

示例代码

#include <iostream>class Rectangle {
private:int length;int width;
public:// 带参数的构造函数Rectangle(int l, int w) {length = l;width = w;std::cout << "Parameterized constructor called" << std::endl;}int area() {return length * width;}
};int main() {Rectangle rect(5, 3); // 创建对象时传递参数,调用带参数的构造函数std::cout << "Area of rectangle: " << rect.area() << std::endl;return 0;
}

代码解释

  • Rectangle类的构造函数接受两个参数lw,并将它们分别赋值给lengthwidth成员变量。
  • main函数中创建Rectangle对象时,传递了参数53,调用了带参数的构造函数。
3. 拷贝构造函数

拷贝构造函数是一种特殊的构造函数,用于创建一个新对象,该对象是另一个同类对象的副本。如果类中没有显式定义拷贝构造函数,编译器会自动提供一个浅拷贝的拷贝构造函数。

示例代码

#include <iostream>class Point {
private:int x;int y;
public:Point(int a, int b) : x(a), y(b) {}// 拷贝构造函数Point(const Point& other) {x = other.x;y = other.y;std::cout << "Copy constructor called" << std::endl;}void print() {std::cout << "x: " << x << ", y: " << y << std::endl;}
};int main() {Point p1(1, 2);Point p2(p1); // 调用拷贝构造函数p2.print();return 0;
}

代码解释

  • Point类的拷贝构造函数接受一个const引用的Point对象other,并将其成员变量的值复制到新对象中。
  • main函数中,通过Point p2(p1)创建了一个新对象p2,它是p1的副本,调用了拷贝构造函数。

构造函数的初始化列表

构造函数的初始化列表用于在构造函数体执行之前初始化类的数据成员。它可以提高效率,尤其是对于常量成员和引用成员。

示例代码

#include <iostream>class Circle {
private:const double pi;double radius;
public:// 使用初始化列表初始化常量成员和普通成员Circle(double r) : pi(3.14159), radius(r) {std::cout << "Circle constructor called" << std::endl;}double area() {return pi * radius * radius;}
};int main() {Circle c(5);std::cout << "Area of circle: " << c.area() << std::endl;return 0;
}

代码解释

  • Circle类的构造函数中,使用初始化列表pi(3.14159), radius(r)piradius进行初始化。pi是常量成员,必须在初始化列表中进行初始化。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com