编程语言
首页 > 编程语言> > C++构造函数&析构函数&组合类

C++构造函数&析构函数&组合类

作者:互联网

C++构造函数&析构函数&组合类

作用: C++在定义类的变量的时候,首先调用构造函数并且在类的变量被释放前调用析构函数。一般来讲,构造函数可以为类内成员变量来初始化,也可以对类内其他类的成员进行初始化。析构函数一般可以进行释放调用的资源。

构造函数:
在C++的类中,构造函数的名字与类的名字相同。构造函数的参数可以由这个类的变量来进行传递。构造函数还可以进行参数重载、参数默认

//class defination
class stu{
	public:
		stu(int a,int b);
		stu(int c);
	private:
		int age,score,gpa;
}
stu::stu(int a,int b){
	age = a;
	score = b;
}
stu::stu(int c){
	gpa = c;
}
//main
stu a(1,3);//a.age=1,a.score=3
stu b(1);//a.gpa=1
stu c//❌

默认构造函数:
上面代码最后一行错了的原因是,c++默认如果class中没有创建构造函数,则自动帮助创建构造函数(stu::stu(){})可是这个构造函数中没有参数也没有什么作用。如果我们一旦自己创建了构造函数,那么默认的构造函数就不会帮我们创建,因此上述代码中我们没有为变量中不需要传值的情况考虑,因此最后一行会报错,解决办法其一是新增一个构造函数(无参数值)其二是对构造函数设置默认参数。

析构函数:
析构函数的名字是在构造函数名字前加上‘~’,并且如果存在多个类,那么析构函数在多个类结束生命周期前,按照构造函数执行顺序的逆序来执行(有点像栈)。

组合类(包容类)
组合类可以看做类的一种嵌套,在一个a类中定义b、c类的变量

class Book{
	int a;
}
class Name{
	int b;
}
class c{//组合类
	Book a;
	Name b;
}

其中c为组合类

组合类中的执行顺序:
组合类中优先定义内部子类的变量,然后才是自己的构造函数。

//class defination
class stu{
    public:
        stu(){
            cout << "构造(stu)" << endl;
        }
        ~stu(){
            cout << "析构(stu)" << endl;
        }
};
class tea{
    public:
        tea(){
            cout << "构造(tea)" << endl;
        }
        ~tea(){
            cout << "析构(tea)" << endl;
        }
};
class tor{
    public:
        tor(){
            cout << "构造(tor)" << endl;
        }
        ~tor(){
            cout << "析构(tor)" << endl;
        }
    private:
        stu a;
        tea b;
};
//main
int main(){
    tor a;
    return 0;
}
//output
构造(stu)
构造(tea)
构造(tor)
析构(tor)
析构(tea)
析构(stu)

显然,在创建tor类变量后执行顺序为内部类构造函数(stu->tea)->自身类构造函数(tor)

组合类中的初始化

class stu{
    public:
        stu(int a=0){
            age = a;
            cout << "stu中age为:" << age << endl;
        }
        void operator=(int a){
            this->age = a;
        }
    private:
        int age;
};

class tor{
    public:
        tor(int for_tor,int for_stu):a(for_stu){/******/
            score = for_tor;
            cout << "tea中score为:" << score << endl;
        }
    private:
        stu a;
        int score;
};
int main(){
    tor a(1,2);
    return 0;
}

为了在tor中使用stu的构造函数对a进行赋值,需要在tor的构造函数后,使用冒号:引出a的构造函数的参数列表,然后进行参数的赋值。
对于想要赋值多个构造函数的参数的情况,可以使用逗号来分隔。

标签:tor,C++,stu,int,析构,class,构造函数
来源: https://blog.csdn.net/qq_33526880/article/details/115632653