類A have-a 類B,類B訪問類A public 成員

需求是類A中包含類B,而類B又須要訪問類A的public屬性的成員。ios

首先類B中要訪問類A的屬性,那麼對於類B而言,咱們必需要知道有類A這個類,因此在類B的具體實現以前咱們須要前向聲明類A。函數

對於類A包含一個類B的對象,那麼對於類A而言,須要知道類B的構造函數,因此類B的構造函數的聲明須要在類A的具體實現以前。this

main.cppspa

#if 0//Multi
#include "A.h"
#else
#include <iostream>
using namespace std;

class CA;
class CB
{
    public:
        void funB(CA &a);
        CB(){};
        ~CB(){};
};

class CA
{
    public:
        int m_a;
        CB b;
        void funA();
        CA(int a);
        CA(){};
        ~CA(){};
};

void CA::funA()
{
    b.funB(*this);
}
CA::CA(int a)
{
    m_a=a;
}

void CB::funB(CA &a)
{
    cout<<"this is CA: "<<a.m_a<<endl;
}
#endif
int main()
{
    CA a(3);
    a.funA();
    return 0;
}

多文件的話則選擇Multi開關下的代碼code

A.h對象

#ifndef _A_H_
#define _A_H_
#include "B.h"
class CA
{
    public:
        int m_a;
        CB b;
        void funA();
        CA(int a);
        CA(){};
        ~CA(){};
};
#endif

A.cppblog

#include "A.h"
void CA::funA()
{
    b.funB(*this);
}
CA::CA(int a)
{
    m_a=a;
}

B.hio

#ifndef _B_H_
#define _B_H_
class CA;
class CB
{
    public:
        void funB(CA &a);
        CB(){};
        ~CB(){};
};
#endif

B.cppclass

#include "A.h"
#include "B.h"
#include <iostream>
using namespace std;
void CB::funB(CA &a)
{
    cout<<"this is CA: "<<a.m_a<<endl;
}

太水了,繼續享受着在被我拖着後腿的公司裏工做。stream

相關文章
相關標籤/搜索