类定义中持有对象

本文通过两个示例对比了C++中对象的不同持有方式:一种是每个对象内部创建新的实例,另一种是在外部创建实例并注入到对象中。通过输出对象地址的方式展示了这两种方式的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类定义中持有对象

Main

#include"House.h"

voidmain(){

    /*House house1;

    House house2;*/

    House*house1=newHouse();

    House*house2=newHouse();

    cout<<&(house1->getDog())<<endl;

    cout<<&(house2->getDog());

}

 

Dog类:

Dog::Dog(int_age)

{

    age=_age;

}

 

House类:

#include"Dog.h"

classHouse

{

public:

//  Dog d;

    Dog*d=newDog();

    House();

    DoggetDog();

};

DogHouse::getDog()

{

//  return d;

    return*d;

}

 

结果均为输出地址不同。

结论:这种写法House的不同对象持有的是不同Dog对象。

 

 

 

 

 

持有相同对象的写法:构造注入。

voidmain(){

    Dog*d=newDog(12);

    House*house1=newHouse(d);

    House*house2=newHouse(d);

    cout<<&(house1->getDog())<<endl;

    cout<<&(house2->getDog());

}

 

 

House构造器:

House::House(Dog*_d)

{

    d=_d;

}

House头文件:

#include"Dog.h"

classHouse

{

public:

    Dog*d=0;

    House(Dog*);

    House();

    ~House();

    Dog&getDog();

};

 

结果:输出地址相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值