C++构造函数

C++中可以给类提供很多重载的构造函数,首先,如果没有构造函数,将有一个默认的无参的构造函数

1.默认的构造函数

class Person
{
    public:
        const std::string & getName() const;
        const int getAge() const;
        void display() const;
        virtual ~Person();
        
    private:
        std::string name;
        int age;
};

void Person::display() const
{
    std::cout<<"name: "<<name<<std::endl;
    std::cout<<"age: "<<age<<std::endl;
}

Person::~Person()
{
    std::cout<<"Destructor ~Person() is called"<<std::endl;
}
int main()
{
    Person p;
    p.display();

    return 0;
}

这个函数由于没有构造函数,那么在定义Person的时候会调用默认的无参的构造函数,这个默认的函数实际上函数体为空,也就是什么都不敢干。所以实际没有对成员变量进行初始化,所以输出是:

name:
age: 4310286
Destructor ~Person() is called

当类的定义中有了构造函数时,不会再提供默认的构造函数了,修改类的定义如下

class Person
{
    public:
        Person();
        void display() const;
        virtual ~Person();
        
    private:
        std::string name;
        int age;
};


Person::Person()
{
    std::cout<<"Constructor Person() is called"<<std::endl;
}

void Person::display() const
{
    std::cout<<"name: "<<name<<std::endl;
    std::cout<<"age: "<<age<<std::endl;
}

Person::~Person()
{
    std::cout<<"Destructor ~Person() is called"<<std::endl;
}

主函数不变,这个时候由于类定义了自己的无参的构造函数,所以这个时候会调用类中自己定义的无参的构造函数,输出如下:

Constructor Person() is called
name:
age: 4310478
Destructor ~Person() is called

下面增加定义一个带参数的构造函数对成员变量进行初始化

Person::Person(const std::string &t_name, int t_age)
{
    this->name = t_name;
    this->age = t_age;
    std::cout<<"Constructor Person(const std::string &t_name, int t_age) is called"<<std::endl;
}

修改主函数的对象定义

Person p("Kobe", 40);

这个时候用了两个参数来定义一个对象,所以这个时候会调用Person类的带这两个类型参数的构造函数。输出如下:

Constructor Person(const std::string &t_name, int t_age) is called
name: Kobe
age: 40
Destructor ~Person() is called

那么现在好奇上面没有构造函数的时候会默认一个函数体为空的构造函数,那么如果现在这里只有带参数的构造函数,那么会不会有一个这样的默认的构造函数呢?那么修改类的定义。将之前自己定义的无参的构造函数注释,并将对象的定义回到:

Person p;

这个时候编译报错

error: no matching function for call to 'Person::Person()'

所以我们可以确定,在类没有定义自己的构造函数的时候,那么会提供一个默认的函数体为空的无参构造函数。一旦类的定义提供了构造函数,不管有没有参数,那么将不再提供默认构造函数了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值