构造函数
数据多为私有,初始值为随机值,要想初始化,要用公有函数进行初始化。
更好的初始化方法:构造函数。
要求:
1.函数名要和类名一致。
2.构造函数没有返回值,也不能写void。
3.实例化对象之后,构造函数自动被调用,且只被调用一次(针对一个对象,有3个对象就调用3次,分别调用1次)。
4.构造函数可以重载,即初始化可以不一样。
5.构造函数可以在类中定义,也可以在类外定义。
6.如果类中没给出构造函数,系统会自动给出一个缺省的构造函数。
include<iostream>
using namespace std;
class Test{
public:
Test(){ //构造函数名和类名一致
cout<<"Create Test Object:"<<this<<endl;
data = 0; //初始化
}
Test(int d){
data = d;
}
Test(int d,int x,int y){
data = d;
this->x = x;
this->y = y;
}
public:
void InitTest(int d = 0){ //用公有函数进行初始化,没有构造函数初始化好
data = d;
}
private:
int data;
int x;
int y;
};
//构造函数也可以在类外定义
Test::Test(int x,int y){
this->x= x;
this->y = y;
}
void main(){
Test t1; //执行第一个Test构造函数,注意这里不能写成Test t1();这样就变成声明一个函数,返回值为Test类型
Test t2(10); //执行第二个Test构造函数
Test t3(1,2,3); //第三个Test构造函数
Test t4(10,20); //第四个Test构造函数
}
注意:如果没有写构造函数,实例化对象之后,C++会默认产生一个缺省的构造函数。形如Test(){} 所以初始值还是随机值。但是只要定义了任何一个构造函数,则系统不会自动生成缺省的构造函数,因此参数列表要对应,否则会报错。缺省函数只能有一个,否则程序不知道执行哪一个。
class Test{
public:
Test(){
}
//两者都是缺省函数,只能取其一
Test(int d = 0){
data = d;
}
private:
int data;
};
析构函数
要求:
1.析构函数名要和类名一致,但在前面要加一个~。如:~CGoods()。
2.析构函数没有函数返回类型,不能写void,但析构函数不带任何参数。
3.一个类只能有一个析构函数,析构函数可以缺省。
4.对象注销时,系统自动调用析构函数。
include<iostream>
using namespace std;
class Test{
public:
Test(){ //构造函数名和类名一致
cout<<"Create Test Object:"<<this<<endl;
data = 0; //初始化
}
~Test(){
cout<<"Free Test Object:"<<this<<endl;
}
private:
int data;
};
void main(){
Test t1;
Test t2;
Test t3;
Test t4;
}
注意:构造的顺序是t1-t4,析构的顺序则是t4-t1。
include<iostream>
using namespace std;
class Test{
public:
Test(int d = 0){ //构造函数名和类名一致
cout<<"Create Test Object:"<<this<<endl;
data = d; //初始化
}
~Test(){
cout<<"Free Test Object:"<<this<<endl;
}
private:
int data;
};
void main(){
//Test t(10); //先构造函数,data=10,再析构函数,由生到死
Test t;
t = 100; //把整型数据赋值给一个对象,这是可行的
int value;
value = t; //value = t.data,这是不行的
}
版权声明:本文为博主原创文章,如有错误,恳请大家在评论区指出,在下不胜感激~如要转载注明出处即可~