none
成员对象如何访问成员函数? RRS feed

  • 问题

  •  

    Hi all

     

    在一个类A中有一个类型为B的成员对象,

    class A

    {

    public:

     float GetValue();

     

    private:

      B b;

    }

     

    class B

    {

    public:

     

      void fuc1();

    .....;

    }

    我想在func1 中访问 A 的 GetValue  , 该如何做?

     

    谢谢了

     

    2008年11月26日 14:03

答案

全部回复

  • A和B是 “is implemented in terms of”的关系。A是依赖于B的。如果要想在func1中用A,那么B也依赖于A了。最好不要使用这种强依赖关系。但如果一定要这样实现。 

    class A

    {

    public:

     float GetValue();

     A():m_pB(new B(const_cast<A*>(this))){};

     virtual A~(){

    if(NULL != m_pB)

    {

    delete m_pB;

    m_pB = NULL;

    }

    };

    private:

      B* m_pB;

    }

     

    class B

    {

    private:

      A m_pA;

    public:

      B(){};

      B( const A* pA):m_pA(pA){};

     

      void fuc1() const; // using m_pA;

    .....;

    }

    2008年11月26日 14:27
    版主
  •  

    在vs2005中编译通不过

     

    #include "stdafx.h"

    class B;
    class A

    {

    public:

     float GetValue() { return 0;}

     A():m_pB(new B(const_cast<A*>(this))){};

     virtual ~A(){

      if(NULL != m_pB)

      {
       delete m_pB;
       m_pB = NULL;
      }

     };

    private:
     B* m_pB;

    };

     

    class B

    {

    private:

     A* m_pA;

    public:

     B(){};

     B( const A* pA):m_pA(pA){};

     void fuc1() const; // using m_pA;

     

    };

    void B::fuc1()
    {
      m_pA->GetValue();
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
     return 0;
    }

     

    2008年11月27日 2:03
  • #include "A.h"

    void fun1()

    {

       A a;

       a.GetValue();

    }

    2008年11月27日 2:08
    版主
  •  

    #include "stdafx.h"


    class A;
    class B

    {

    private:

     A* m_pA;

    public:

     B(){};

     B(  A* pA):m_pA(pA){};

     void fuc1() const; // using m_pA;

     

    };
    class A
    {

    public:

     float GetValue() { return 0;}

     A(){
     m_pB = new B(this);
     };

     virtual ~A(){

      if(NULL != m_pB)

      {
       delete m_pB;
       m_pB = NULL;
      }

     };

    private:
     B* m_pB;

    };

     

    void B::fuc1() const
    {
      m_pA->GetValue();
    }

     


    int _tmain(int argc, _TCHAR* argv[])
    {
     return 0;
    }

     

     

    不过这样有个错误地用法,最好能够在A中加一个初始化函数将this 给B。要不就用施昌权的方法。看你想不想用A的实例了

    2008年11月27日 5:10
    版主
  • 用指针!

    2008年11月28日 8:29