C++中没有默认构造函数的类

C++中没有默认构造函数的类

构造函数的重载的判断条件是:参数的个数或者类型不同,其他要保持一样。

默认构造函数:在建立对象时候不必给出实参的构造函数,称为默认构造函数,显然,无参构造函数属于默认构造函数,一个类只能有一个默认构造函数,如果用户未定义构造函数,则系统会自动提供一个默认构造函数,但它的函数体是空的,不起初始化作用,如果用户希望在创建对象的时候就能使数据成员有初值,就必须自己定义构造函数。
一个类中可以包含多个构造函数,但是对于每个对象来说,建立对象只执行其中一个构造函数,并非每个构造函数都被执行。

在以下示例程序中, Human 类没有默认构造函数,因此创建 Human 对象时必须提供姓名和年龄:

#include 
#include 
using namespace std;

class Human
{
    private:
    string name;
    int age;

    public:
    Human(string humansName /*= "Adam"*/, int humansAge /*= 25*/) 
    {
        name = humansName;
        age = humansAge;
        cout << "Overloaded constructor creates " << name;
        cout << " of age " << age << endl;
    }

    void IntroduceSelf()
    {
        cout << "I am " + name << " and am ";
        cout << age << " years old" << endl;
    }
};

int main()
{
    Human firstMan("Adam", 25); 
    Human firstWoman("Eve", 28);

    firstMan.IntroduceSelf();
    firstWoman.IntroduceSelf();
}

输出:

Overloaded constructor creates Adam of age 25
Overloaded constructor creates Eve of age 28
I am Adam and am 25 years old
I am Eve and am 28 years old

分析:
这个版本的 Human 类只有一个构造函数,该构造函数接受一个 string 参数和一个 int 参数,如第 11行所示。没有默认构造函数,而在您提供了重载的构造函数时, C++编译器不会为您生成默认构造函数。 这个示例还表明, 可在创建 Human 对象时提供 name 和 age, 且以后不能修改它们。 这是因为 Human 类的 name 属性存储在私有变量 Human::name 中, main() 或其他不属于 Human 类成员的实体不能访问或修改它。换句话说,重载的构造函数要求 Human 类的用户创建每个对象时,都必须指定姓名(和年龄),且不能修改姓名,这与现实情况相当吻合,您说呢?您的姓名是父母在您出生时取的,别人可以知道,但任何人都无权修改(您自己除外)。

该文章会更新,欢迎大家批评指正。

推荐一个零声学院的C++服务器开发课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容
点击立即学习:C/C++后台高级服务器课程

你可能感兴趣的:(C++编程基础,c++)