C++入门——60s从0到1
利用构造函数对类对象进行初始化
构造函数是类的一种特殊函数,用于在创建对象时对对象进行初始化。在C++中,每个类都可以定义一个或多个构造函数,这些构造函数具有相同的名字但参数列表可以不同。在创建对象时,编译器会根据传入的实参列表来选择合适的构造函数进行调用。
构造函数的语法如下:
class ClassName {
public:
// 构造函数声明
ClassName(parameter_list);
// ...
};
其中,`ClassName`是类名,`parameter_list`是构造函数的参数列表,可以包含零个或多个参数。在函数体内部,可以对对象的成员变量进行初始化。
下面是一个简单的示例:
#include <iostream>
using namespace std;
class Person {
public:
// 构造函数
Person(string name, int age) {
this->name = name;
this->age = age;
}
private:
string name;
int age;
};
int main() {
Person p1("Tom", 20);
Person p2("Alice", 25);
cout << p1.name << " is " << p1.age << " years old." << endl;
cout << p2.name << " is " << p2.age << " years old." << endl;
return 0;
}
在上面的代码中,我们定义了一个名为`Person`的类,该类有两个私有成员变量`name`和`age`。我们还定义了一个构造函数,该函数接受两个参数`name`和`age`,并将它们分别赋值给对应的私有成员变量。在`main()`函数中,我们创建了两个对象`p1`和`p2`,并分别传入了相应的参数。最后,我们输出了这两个对象的属性值。
除了普通的构造函数外,C++还支持一些特殊的构造函数,包括默认构造函数、拷贝构造函数和移动构造函数。下面分别介绍一下它们的特点和使用方法。
默认构造函数
默认构造函数是一种没有参数的构造函数,它的语法如下:
ClassName();
在创建对象时,如果没有任何参数传递给构造函数,编译器会自动调用默认构造函数进行初始化。例如:
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass() { cout << "Default constructor called." << endl; }
};
int main() {
MyClass obj1; // 调用默认构造函数
MyClass obj2(42); // 调用带参数的构造函数
return 0;
}
在上面的代码中,我们定义了一个名为`MyClass`的类,该类有一个默认构造函数。在`main()`函数中,我们创建了两个对象`obj1`和`obj2`,其中`obj1`调用了默认构造函数,而`obj2`调用了带参数的构造函数。
拷贝构造函数
拷贝构造函数是一种特殊的构造函数,用于将一个对象初始化为另一个对象的副本。它的语法如下:
ClassName(const ClassName& other);
其中,`const ClassName& other`表示一个引用类型的参数,它将引用另一个已经存在的对象。在函数体内部,可以使用该引用对当前对象的成员变量进行初始化。例如:
#include <iostream> using namespace std; class MyClass { public: // 拷贝构造函数 MyClass(const MyClass& other) { cout << "Copy constructor called." << endl; x = other.x; y = other.y; } private: int x; int y; }; int main() { MyClass obj1(42, 33); // 创建一个新对象并初始化 MyClass obj2 = obj1; // 使用拷贝构造函数复制obj1到obj2中 return 0; }
在上面的代码中,我们定义了一个名为`MyClass`的类,该类有两个私有成员变量`x`和`y`。我们还定义了一个拷贝构造函数,该函数将另一个对象的属性值复制到当前对象中。在`main()`函数中,我们创建了一个新对象`obj1`并对其进行了初始化,然后使用拷贝构造函数将它的属性值复制到了另一个对象`obj2`中。需要注意的是,这里的赋值符号是等号而不是冒号。因为这里不是将obj1作为一个临时量来初始化obj2,而是将obj1作为一个完整的对象来复制给obj2。