要是定义了一个类A,又在A里面定义了一个类B,那么,在B的成员函数里,怎么访问A的数据成员??!!

liun02 2004-10-15 10:47:43
要是定义了一个类A,又在A里面定义了一个类B,那么,在B的成员函数里,怎么访问A的数据成员??!!
...全文
185 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mynamelj 2004-10-17
  • 打赏
  • 举报
回复
你用类继承不是更好吗?
或是两个类分开定义,在A类中包函B类的头文件,
然后在A类中定义一个B类的对象

class a
{
public:
b m_obj;
};
Zhymax 2004-10-17
  • 打赏
  • 举报
回复
还是在CTryDiaDlg中添加一个函数访问m_board数组安全一点.
sogh 2004-10-17
  • 打赏
  • 举报
回复
个人认为这样的设计欠妥:
嵌套类不应当直接访问被嵌套类中的成员,最好是利用指针或引用通过参数来传递数据,那怕是同一个类中对成员的访问也需要注意函数耦合的问题。
cadinfo 2004-10-17
  • 打赏
  • 举报
回复
偶不看vc很久,凑个热闹
  • 打赏
  • 举报
回复
不好得!
在CPointValue中
加上CTryDiaDlg * pDlg;指向对话框
liun02 2004-10-15
  • 打赏
  • 举报
回复
这两个类是这样定义的:


class CTryDiaDlg : public CDialog
{
// Construction
public:
static int m_board[17][17];
static int m_list[31];
CTryDiaDlg(CWnd* pParent = NULL); // standard constructor

// Dialog Data
//{{AFX_DATA(CTryDiaDlg)
enum { IDD = IDD_TRYDIA_DIALOG };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA

// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTryDiaDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:
HICON m_hIcon;

// Generated message map functions
//{{AFX_MSG(CTryDiaDlg)
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public :
class CPointValue
{
//private:
public:
int state[13]; //={0,0,0,0,0,0,0,0,0,0,0,0};;
//ʤ£¬»îËÄ£¬µ¥ËÄ£¬ÌøËÄ£¬»îÈý£¬µ¥Èý£¬ÌøÈý£¬ÃßÈý£¬»î¶þ£¬µ¥¶þ£¬Ìø¶þ£¬µ¥¸ö£¬ÎÞÓÃ
int XCoordinate,YCoordinate;
int type[8];//ÓÃÀ´±£´æÒ»¸öµãµÄ8¸ö·½ÏòÉÏ£¬¸÷¸ö·½ÏòÉϵÄÅÅÁеÄÀàÐÍ£¬(0--31)
int rank[4];

// ÉÏ ×óÉÏ ×ó ×óÏÂ ÏÂ ÓÒÏÂ ÓÒ ÓÒÉÏ
int direction[8][2];
// direction[8][2]={{-1,0},{-1,-1},{0,-1},{1,-1},{1,0},{1,1},{0,1},{-1,1}};
bool forbid;
public:
CPointValue(int x,int y);
virtual ~CPointValue();

void Rebirth(int x,int y); //ÒÔx,y¸üÐÂÕâ¸öÀàµÄÊý¾Ý£¬state[12],direction[8],rank[4]
//ÇåÁã
void Rebirth(CPointValue &x);
void Rebirth( void );
void FillState(); //ͨ¹ýtype[8]µÄÖµ¼ÆËãstate[12]µÄÄÚÈÝ
void Make8Type(char flag); //¶Ô(XCoordinate,YCoordinate)µãµÄ8¸ö·½Ïò½øÐбàÂ룬²¢±£´æÔÚ
//Êý×étype[8]Àï
bool CheckForbid(); //ÓÃÀ´¼ì²é(XCoordinate,YCoordinate)µãÊÇ·ñΪºÚ·½½ûÊÖ,ÊǽûÊÖ£¬·µ»Øtrue
void Compare ( CPointValue &x );//½«thisÓëx½øÐбȽϣ¬°Ñ´óµÄÔÙ·ÅÔÚthisÖÐ

void IncSheng(){state[0]++;};
void IncHuo4(){state[1]++;};
void IncDan4(){state[2]++;};
void IncTiao4(){state[3]++;};
void IncHuo3(){state[4]++;};
void IncDan3(){state[5]++;};
void IncTiao3(){state[6]++;};
void IncMian3(){state[7]++;};
void IncHuo2(){state[8]++;};
void IncDan2(){state[9]++;};
void IncTiao2(){state[10]++;};
void IncDanGe(){state[11]++;};
void IncWuYong(){state[12]++;};

int getx(){return this->XCoordinate;};
int gety(){return this->YCoordinate;};


};



};


现在要做的事是这样的:
void CTryDiaDlg::CPointValue::Make8Type(char flag)
{
int temp =m_board[1][1] ;//这里的m_board[1][1]是CTryDiaDlg的数据成员,我现在这样写是不
对的,,我想知道要怎么写才能正常的访问m_board[1][1].
}

薛定谔之死猫 2004-10-15
  • 打赏
  • 举报
回复
一种靠指针参数,还有就是友员,第一种合理一些
tybitsfox 2004-10-15
  • 打赏
  • 举报
回复
在A中提供访问函数。
kpld8888 2004-10-15
  • 打赏
  • 举报
回复
好像没办法。只能传指针或引用过去,进行间接修改
liun02 2004-10-15
  • 打赏
  • 举报
回复
要是用A::m_name;
行吗??

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧