学习C++类和对象

1.1构造函数和析构函数

构造函数:

  • 没有返回值,不用写void
  • 函数名与类名相同
  • 构造函数可以有参数,可以发生重载
  • 创建对象的时候,构造函数会自动调用,而且只调用一次
    class Person
    {
        Person()
        {
            cout<<"Person 构造函数的调用"<<endl;
        }
    
        ~Person()
        {
            cout<<"Person 析构函数的调用"<<endl;
        }
    }
    void test()
    {
        Person s;//在栈上的数据,test执行完毕后,释放这个对象
    }
    int main()
    {
        test();
        return 0;
    }

    析构函数:

  • 没有返回值,不用写void
  • 函数名与类名相同 在名称前加~
  • 构造函数不可以有参数的,不可以发生重载
  • 创建对象的时候,构造函数会自动调用,而且只调用一次

    1.2拷贝构造函数

class Person
{
    Person()
    {
        cout<<"Person 构造函数的调用"<<endl;
    }
    Person(int a)
    {
        cout<<"Person 有参构造函数的调用"<<endl;
    }

    Person(const Person &p)
    {
        // 将传入的人身上的所有属性,拷贝到我身上
        age=p.age;
        cout<<"Person 构造函数的调用"<<endl;
    }
    ~Person()
    {
        cout<<"Person 析构函数的调用"<<endl;
    }
}

 

void test()
{
    //1、括号法
    Person p1;//默认构造函数
    Person p2(10);//有参构造
    Person p3(p2);//拷贝构造

    //2、显示法
    Person p1;
    Person p2 =Person(10);//有参构造
    Person p3 =Person(p2);//拷贝构造

    Person(10);//匿名对象  特点:当前行执行结束后马上被系统回收
    cout<<"aaaaa"<<endl;

    //3、隐式转换法
    Person p4 =10;//相当于写了Person p4=Person(10);   有参构造
    Person p5 =p4;//拷贝构造

}

 匿名对象的输出是先构造再析构,最后输出aaaaa

1.3 拷贝构造函数调用时机

值的方式返回也会调用拷贝构造函数

//值方式返回局部对象
Person doWork2()
{
    Person p1;
    cout<<(int *p1)<<endl;//打印的是p1的地址
    return p1;/*return放回的是p1的克隆体(地址不一样了),doWork2接收到的是克隆体的数据,test03创建对象对象接收
doWork2的p1也是克隆数据*/
    
}
    
void test03()
{
    Person p=doWork2();
    cout<<(int *p1)<<endl;
}

两次打印的地址不同

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值