C++学习第6课,构造函数,虚构函数

2019-06-09  本文已影响0人  Mr小熊_1da7

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类时。

上一篇下一篇

猜你喜欢

热点阅读