//在类(class)中,你可以使用构造函数进行初始化。
class Num {
public:
int i;
};
Num sNum;
sNum.i = 100;//正确
但是,直接在定义时进行初始化会出现错误
class Num {
public:
int i = 100; // Error!错误
};
Num sNum;
而我们的确需要在构造Num类时初始化,怎么办?
我们可以使用类的“构造函数”。
构造函数的定义:
构造函数,顾名思义,即是在构造(定义)这个类时调用的函数。
在类中,一个与类名同名的函数即是该函数的构造函数。
class Num {
public:
int i;
Num (){//构造函数
}
};
Num sNum;
class Num {
public:
int i;
Num (){//构造函数
i = 1;//正确!
}
};
Num sNum;
printf ("i = %d\n", sNum.i);//正确!
类的定义:“一个类中必须有构造函数,否则,类将不能被定义。”
在你的类中,编译器如果没有发现构造函数,就会为你提供一个空的构造函数。
例① - 一定义就帮你设置好了
class OutWords{
public("无参构造函数被调用了!\n");
};
int main (void){
OutWords OW;
return 0;
}
例①的输出:
无参构造函数被调用了!
例② - 比main还要先执行
class First {
First (){
printf("First函数被执行了!\n");
}
};
First F;
int main (void){
printf("main函数被执行了!\n");
return 0;
}
例②的输出:
First函数被执行了!
main函数被执行了!
class student
{
private:
float xuehao;
char *name;
int chengji[20];
student *next;
public:
student()
{
xuehao = 0;
name = NULL;
memset(chengji,0,sizeof(chengji));
next = NULL;
}
student(float x,char *nam,int c[],student *n=NULL)
{
xuehao=x;
name=new char[strlen(nam)+1];
if(name!=0)
{strcpy(name,nam);}
for(int j=0;j<20;j++)
{chengji[j]=c[j];}
n=new student;
if(n!=0)
{next=n;}
}
student(student &s)
{
xuehao=s.xuehao;
name=new char[strlen(s.name)+1];
if(name!=0)
{strcpy(name,s.name);}
for(int jj=0;jj<19;jj++)
{chengji[jj]=s.chengji[jj];}
student *n=new student;
if(n!=0)
{next=n;}
}
};
在构造函数里面初始化。