欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【7】学习C++之类的构造函数

程序员文章站 2022-07-07 08:15:27
(说实话,我一开始真没觉得构造函数这块有多重要,但是看的视频中老师却花了不少的时间去讲这块内容,本着整理了不亏的心态还是整理了一下) 1.常见的构造函数 C++的类在创建对象的时候,都会去调用构造函数,这种行为是强制的。如果在类中没去写构造函数,程序会自动为你的类创建出构造函数,然后去调用他(这个构 ......

(说实话,我一开始真没觉得构造函数这块有多重要,但是看的视频中老师却花了不少的时间去讲这块内容,本着整理了不亏的心态还是整理了一下)

1.常见的构造函数

c++的类在创建对象的时候,都会去调用构造函数,这种行为是强制的。如果在类中没去写构造函数,程序会自动为你的类创建出构造函数,然后去调用他(这个构造函数的函数体是空的,也没有形参,也不执行任何操作。);如果你已经写了构造函数,那么程序在运行的时候会去调用你写的构造函数。

构造函数是可以被重载的,一个类可以有多个重载的构造函数,创建对象时根据传递的实参来判断调用哪一个构造函数。

构造函数中又细分出默认构造函数,具体区别有三言两语不好去说明,还是直接上图比较好:

【7】学习C++之类的构造函数

(感觉这块知识点除了学生在期末考试会考到,其他地方真能用到么)

如果看了上图还不能理解,只能放代码了

class student
{
public:
    //student(){}//无参构造函数,默认构造函数
    student():m_strname("jim"),m_iage(10){}//无参构造函数,默认构造函数
    /*student(string _strname,int _iage)//无参构造函数,参数不带默认值,不是默认构造函数
    {
        m_strname=_strname;
        m_iage=_iage;
    }*/
    student(string _strname,int _iage):m_strname("jim"),m_iage(10)//无参构造函数,参数带默认值,是默认构造函数
    {
        m_strname=_strname;
        m_iage=_iage;
    }
private:
    string m_strname;
    int m_iage;
}

2.拷贝构造函数

定义格式:类名(const 类名& 变量名)

要点1:如果没有自定义的拷贝构造函数,系统会自动生成一个默认的拷贝构造函数。

要点2:当采用直接初始化或复制初始化实例化对象时系统会自动调用拷贝构造函数。

要点3:拷贝构造函数不能被重载。

要点4:拷贝构造函数在参数传递的时候也会被调用。

老惯例,上代码

class abc
{
public:
    abc(){};
    abc(const abc &aaa){}
private:
    int a;
}
void text(abc aa3)
{

}
int main()
{
    abc aa;
    abc aa1 = aa;//调用拷贝构造函数
    abc aa2(aa);//调用拷贝构造函数
    text(aa);//调用拷贝构造函数

    return 0;
}