目录
一、构造函数
定义一个类之后
而在类的声明中是存在一个默认构造函数的(函数体为空)
#include<iostream>
using namespace std;
class Person{
public:
int ID,math,chinese;
//默认构造函数
Person(){
}
};
在主函数中定义一个对象
如下为所有的数据成员为公共时的定义+初始化
class Person{
public:
int ID,math,chinese;
};
int main(){
Person p1={123,23,43};
cout<<p1.ID<<endl;
}
当数据成员为私有时候想要在定义的同时对他进行初始化则需要用到构造函数。
class Person{
private:
int ID,math,chinese;
public:
void out(){
cout<<ID<<math<<endl;
}
//默认构造函数
Person(){
}
//构造函数
Person(int I,int M,int C){
ID=I;math=M;chinese=C;
}
};
int main(){
Person p1(123,23,43);
p1.out();
}
如代码所示可以得出的有:
1、构造函数是没有返回类型的。
2、构造函数的名字是与类名保持一致的。
3、构造函数是可以有参数的。
构造函数也是函数也可以重载
#include<iostream>
using namespace std;
class Person{
private:
int ID,math,chinese;
public:
void out(){
cout<<ID<<math<<endl;
}
//默认构造函数
Person(){
}
//构造函数
Person(int I,int M){
ID=I;math=M;
}
//重载
Person(int I,int M,int C){
ID=I;math=M;chinese=C;
}
};
int main(){
Person p1(123,23,43);
Person p2(1233,23);
p1.out();
p2.out();
}
构造函数是在对象在定义的同时调用的,而p1,与p2所调用的构造函数是不同的!!!
二、析构函数
在了解了构造函数之后,那析构函数便是信手拈来!!!
整体结构:
class Person{ private: int ID,math,chinese; public: void out(){ cout<<ID<<math<<endl; } //默认构造函数 Person(){ } //构造函数 Person(int I,int M,int C){ ID=I;math=M;chinese=C; } //析构函数 ~Person(){ } }; int main(){ Person p1(123,23,43); p1.out(); }
对于析构函数,是不需要参数的,并且是在块执行结束的同时,每个变量遵循着后进先出的原则调用着析构函数
也就意味着最后出现的变量会先调用析构函数来释放自己所占用的空间,
因为析构函数在类中也是默认存在的,显现出来后可以观察到它:
1、也是没有返回值类型的函数。
2、函数名为(~类名)。
三、拷贝构造
终于到了最后一个拷贝构造函数了!他的本质与构造函数是类似的,也是定义的同时进行初始化,但不同的的是初始化的对象是与之数据类型一致的其他对象。
例如:
int main(){ int a=0; int b=a;//此时b的值也等于a的值等于0 }
在这里我们要实现的是用户自定义的类通过此种赋值来对对象进行初始化
class Person{
private:
int ID,math,chinese;
public:
void out(){
cout<<ID<<math<<endl;
}
//默认构造函数
Person(){
}
//构造函数
Person(int I,int M,int C){
ID=I;math=M;chinese=C;
}
//拷贝构造
Person(Person &p){
ID=p.ID;math=p.math;chinese=p.chinese;
}
};
int main(){
Person p1(123,23,43);
p1.out();
//拷贝构造的使用
Person p2=p1;
p2.out();
}
此时便调用了拷贝构造函数!
注:
class Person{
private:
int ID,math,chinese;
public:
void out(){
cout<<ID<<math<<endl;
}
//默认构造函数
Person(){
}
//构造函数
Person(int I,int M,int C){
ID=I;math=M;chinese=C;
}
//拷贝构造
Person(Person &p){
ID=p.ID;math=p.math;chinese=p.chinese;
}
};
int main(){
Person p1(123,23,43);
p1.out();
//拷贝构造的使用
Person p2;
p2 = p1;
p2.out();
}
如上的主函数中p2=p1则不是拷贝构造函数的作用!!!
切记!拷贝构造函数只能在兑现大哥定义同时初始化才可以!!