一个关于c++类的问题

shrwin 2001-07-20 08:45:50
假设有一个类
class aClass
{
public:
// some functions
private:
someClass1 c1;
someClass2 c2;
// other private data member
bClass bObject;

};

有没有方法在bClass中访问aClass的成员c1, c2 ...
...全文
86 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
widewave 2001-07-23
  • 打赏
  • 举报
回复
要么用友元类或者友元函数。
要么就直接用函数调用。
xiterator 2001-07-23
  • 打赏
  • 举报
回复
下面给出代码谨供参考,2种方案:
1.前向声明法,参见class bClass的实现;
2.模板协议法,参见class bClassTemp<T>的实现。
为简单起见,用someClass代替someClass1,someClass2,并且省略了防制重复包含的#ifndef/#define/#endif对.

////aClass.h
#include "someClass.h"
#include "bClass.h"
#include "bClassTemp.h"
class aClass
{
friend class bClass;
friend class bClassTemp<aClass>;
public:
// some functions
void Work();
aClass(): bObject(*this), bObjectTemp(*this) {}
private:
someClass c;
bClass bObject;
bClassTemp<aClass> bObjectTemp;
};

////aClass.cpp
#include "aClass.h"
void aClass::Work()
{
bObject.Work();
bObjectTemp.Work();
}

////bClass.h
#include "someClass.h"
class aClass;
class bClass
{
aClass& m_aClass;
public:
bClass(aClass& x): m_aClass(x) {}
void Work();
};
////bClass.cpp
#include <iostream>
#include <iomanip>
#include "aClass.h"
#include "bClass.h"
void bClass::Work()
{
std::cout << ".....bClass_Work" << std::endl;
m_aClass.c.Access();
}
////bClassTemp.h (only .h for bClassTemp is a Template Class)
template<typename T>
class bClassTemp
{
T& m_aClass;
public:
bClassTemp(T& x): m_aClass(x) {}
void Work()
{
std::cout << ".....bClassTemp_Work" << std::endl;
m_aClass.c.Access();
}
};
////someClass.h
#include <iostream>
#include <iomanip>
class someClass
{
public:
void Access()
{
std::cout << "....someClass_Access" << std::endl;
}
};

////////////////////////
//main.cpp
#include "aClass.h"
int main(int argc, char* argv[])
{
//printf("Hello World!\n");
aClass x;
x.Work();
return 0;
}
shrwin 2001-07-23
  • 打赏
  • 举报
回复
非常感谢各位朋友,xiterator(xi)的回答还没
试,先加分。
shrwin 2001-07-20
  • 打赏
  • 举报
回复

friend和继承我都试过,但实际运作时有许多问题。
如:1)aClass 中要include "bClass.h", bClass中就
无法include "aClass.h"
2) 两种方法似乎都不能使bClass在main()中直接修改通过
aClass声明object的私有成员,而是修改bClass内通过
aClass声明的object。

wjyasd说的编写公用接口我不太明白,能否讲的详细点。

这个问题来自一个课程项目:编写一个模拟CPU运行的程序。
CPU内的各种register, ALU以及外部的memory都很容易做成
某个类的object. 但是control unit (CU) 就很难分离一个
独立的模块,因为它要控制其他组件的动作。



wjyasd 2001-07-20
  • 打赏
  • 举报
回复
1 友员函数
2 编写公用接口
nuaalj 2001-07-20
  • 打赏
  • 举报
回复
1.让bclass继承aclass
2.声明一个友类
leeyansheng 2001-07-20
  • 打赏
  • 举报
回复
你可以做一个 友元类
不过这打破了 类的封装性

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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