0 先上代码
class person{
private:
char* name;
int age;
char* work;
public:
person()
{
cout << "person()"<<endl;
name = NULL;
age = 0;
work = NULL;
}
person(char* name,int age=10,char* work = "none")
{
cout << "person(char* ,int age=10,char* work = )" << endl;
this->name = new char[strlen(name)+1];
strcpy(this->name, name);
this->age = age;
this->work = new char[strlen(work)+1];
strcpy(this->work, work);
}
~person()
{
if(this->name)
delete this->name;
if(this->work)
delete this->work;
}
void printfinfo(void)
{
cout << "name = " << name << ",age = " << age << endl;
}
};
1 构造函数
person()和person(char* name,int age=10,char* work = "none")都是构造函数。
2 构造函数的调用
在类被定义时,内部变量定义之后,执行构造函数。
3 构造函数如何使用
person per;//情况1:调用无参数的构造函数
person per1("xiaoming");//情况2:调用有参数的构造函数,不过age,和work参数为默认值
person *per2 = new person;//情况3:以new的方式定义类,调用无参数的构造函数
person *per3 = new person[2];//情况4:定义一个类数组
person *per4 = new person("liuwu",10,"student");//情况5,以new的方式定义类,调用有参数的构造函数
person *per5 = new person("zhangsan",10);//情况6,以new的方式定义类,调用有参数的构造函数
4 虚构函数
~person()为虚构函数,有且只有一个,无参数
5 虚构函数的调用
虚构函数在类被销毁的前一刻被调用。
*在方法体内定义的类,在退出该方法时,被销毁。
*或是调用delete 来删除new出来的结构体 delete per;
Person *per = new Person;
6 类包含类的类
class Student{
private:
char* name;
int age;
char* work;
public:
person father;
person mother;
void Student(){}
void Student(char* name, int age, char* work = "none")
{
cout << "Student(char* name, int age)"<< endl;
this->name = new char[strlen(name) + 1];
}
}
定义时,先运行内部类的构造函数,再运行自己的构造函数;
销毁时,先运行自己的虚构函数,再运行内部类的虚构函数;
7 构造函数自带参数初始功能
class Port{
private:
int x;
int y;
public:
Port(){}
Port(int x,int y):y(y),x(x)
{
cout << "Port!" << endl;
}
void printinfo(void)
{
cout << "x = "<<x<<", y = "<<y<< endl;
}
};
int main()
{
Port po(1,2);
po.printinfo();
return 0;
}
结果为
Port!
x = 1, y = 2
*这里Port(int x,int y):y(y),x(x)为构造函数,后面的:y(y),x(x),表示,this->y = 输入的y,this->x = 输入的x
8 构造复制函数
class Port{
……
Port(const Port &per)//构造复制函数
{
x = per.x;
y = per.y;
}
……
}
该方法用于
①Port a = b;②Port c(b);会调用Port(const Port &per)
b也是Port类时。
网友评论