📜  C++ |构造函数|问题12(1)

📅  最后修改于: 2023-12-03 15:13:58.107000             🧑  作者: Mango

C++ | 构造函数 | 问题12

在C++中,构造函数是一种特殊的成员函数,用于创建和初始化对象。每个类可以定义一个或多个构造函数,其中“默认构造函数”是不带任何参数的构造函数。在本文中,我们将讨论“默认构造函数不需要定义”的问题。

问题描述

在定义一个C++类时,如果没有显示地定义构造函数,那么编译器会自动为该类生成一个默认构造函数。例如:

class Person {
public:
    std::string name;
    int age;
};

Person p; // 正确,没有显示定义构造函数,但编译器会自动生成默认构造函数

此时,我们可以通过p.namep.age来访问该对象的成员属性。但是如果我们添加了一个自定义构造函数,而没有提供一个默认构造函数,则会出现以下错误:

class Person {
public:
    std::string name;
    int age;
    Person(int a) { age = a; }
};

Person p; // 错误,没有默认构造函数可用
解决方案

如果我们需要自定义一个构造函数,但同时也需要使用默认构造函数,则需要显示地定义一个默认构造函数。例如:

class Person {
public:
    std::string name;
    int age;
    Person() {} // 显示定义一个默认构造函数
    Person(int a) { age = a; }
};

Person p; // 正确,现在有一个默认构造函数可用
结论

虽然编译器可以为我们自动生成默认构造函数,但是当我们需要自定义构造函数时,我们需要显示地定义默认构造函数,否则编译器会报错。

参考资料