BZ易风

导航

 

 

class Person
{
    Person() //构造
    {
    }                    //可以重载和有参

    ~Person() //析构
    {
    }
}

构造函数

与类名相同,不用写void 

分类

参数分类:无参构造函数 有参构造函数

类型分类:普通构造函数 拷贝构造函数

#include <iostream>
using namespace std;

class Person
{
public:
    Person()        //无参
    {}
    Person(int a)    //有参
    {}
    Person(const Person& p)    //拷贝
    {
        age = p.age;
    }

private:
    int age;
}

void test01()
{
    //构造函数调用方式: 1括号法
    Person p1(1);
    p1.age = 10
    Person p2(p1);         //拷贝p1
    cout << p2.age << endl;

    // Person p3(); //编译器会认为这行是函数的声明
    Person p3; //默认构造函数不要加()

    //构造函数调用方式: 2.显示法
    Person p4 = Person(100);    //右值为匿名对象, 匿名对象特定,如果编译器发现对象是匿名的,那么在这行代码结束后就释放这个对象
    Person p5 = Person(p4);
    //不能用拷贝构造函数 初始化匿名对象
    Person(p5);  //如果这么写 相当于 Person p5;
    //隐式类型转换
    Person p6 = 100; //相当于 Person p6 = Person(100)
    Person p7 = p6; //相当于 Person p7 = Person(p6)
}

int main()
{

}

 拷贝构造函数调用时机

1.用已经创建好的对象来初始化新对象

void test01()
{
    Person p1;
    p1.age = 10;
    
    Person p2(p1); //p1是创建好的对象
}

2.以值传递的方式给函数参数传值

void doWork(Person p1)      //Person p1 = Person(p)
{

}

void test02()
{
    Person p;
    p.age = 10;

    doWork(p); 
}

3.以值方式返回局部对象

Person doWork2()
{
    Person p1;
    return p1;              //复制一个新的数据返回
}
void test03()
{
    Person p = doWork2();   
}

Debug结果:

 

Release结果:

 

 

析构函数

类名前加~, 不可以重载,不可以有参数

posted on 2021-08-19 17:25  BZ易风  阅读(46)  评论(0编辑  收藏  举报