C++ 在类中包含另一个类

除了继承关系外,另一种常用的关系是包含关系,一个类中包含了另一个类实例化的对象作为数据成员,即在类中含有类类型的数据成员。有两种包含类的方法:

方法一: 将数据成员定义成类的指针;

方法二: 直接将数据成员定义成类的实例。

class Subtarget{ 
    Subtarget(int Parameter1, int Parameter2){};
}  //定义一个类Subtarget,在其他类中可以像使用内置类型一样将该类的对象作为成员对象  

class Target{
    
    std::shared_ptr<Subtarget> subtarget_=nullptr; //方法一 (优选)
    Subtarget subtarget{4,8};//方法二 (直观方法)

}

方法二比较直观,像使用内置类型一样直接实例化Subtarget类型。成员对象必须被初始化,内置类型初始化往往不需要输入参数,比较简洁,但自定义的类的构造函数往往需要输入参数,在构造函数初始值列表中输入大量参数并不方便。相比而言,方法一将类定义成类的指针(使用shared_ptr是为了更安全,防止使用指针时可能产生的内存泄漏),在类的声明中可以先初始化为nullptr,这样将数据成员定义成类的指针实现将类型的初始化推迟到函数定义中

subtarget_.reset(new Subtarget(4,8));

将数据成员定义成类的指针更重要的好处是使用 多态 机制。在定义中也可以将subtarget_绑定到Subtarget的派生类中,从而实现多态。

猜你喜欢

转载自blog.csdn.net/Cxiazaiyu/article/details/107805844