C++:lower class obj访问upper class obj

前言

首先本篇文章讨论集成,而是一个class 包含另一个class obj,比如下面代码,base class里面包含了derive class的obj

class derive{
public:
	derive(){}
	~derive(){}
};

class base{
public:
	base()
	:d(){
	
	}
	~base(){}
private:
	derive d;
};

那么问题来了,如果class A包含2个class obj,分别是B和C,而C又包含一个class obj D,此时D obj想调用B obj的某个成员函数怎么办?如下图

class A
class B
class C
class D

解决方案

这里建议在class C中传入class B的obj指针到D中如下代码,class B有一个成员函数,而class D的obj想调用它

#include <iostream>
class B{
public:
    B(){std::cout << "B construct" <<std::endl;}
    ~B(){std::cout << "B destruct" << std::endl;}
    int get_id(){return id_;} 
private:
    int id_ = 10;

};

class D{
public:
    D(class B *b):b_(b){std::cout << "D construct and  get class B's id " << b_->get_id() <<std::endl; }
    ~D(){std::cout << "D destruct" << std::endl;}
private:
    class B *b_;
};



class C{
public:
    C(class B *b):d(b){std::cout << "C construct" <<std::endl;}
    ~C(){std::cout << "C destruct" << std::endl;}
private:
    class D d;
};

class A{
public:
    A():b(),c(&b){std::cout << "A construct" <<std::endl;}
    ~A(){std::cout << "A destruct" << std::endl;}
private:
    class B b;
    class C c;
};

int main(){
    auto a = new A();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值