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