两个类之间怎么共享数据

chengshiding 2013-05-02 09:45:24
class A
{
public:
int data[100];
void function()
{
use data;
}
};
class B
{
public:
int data[100];
void function()
{
set data;
}
};
class C
{
A* a[10];
B* b[10];

};
void main()
{
C c;
for(i=0; i<10; i++)
c.a[i] = new A;
c.b[i] = new B;
}

就是希望data数组是类A和类B共享的,怎么才能实现呢,定义全局变量的话,就不清楚是那个对象的data了。
...全文
892 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
turing-complete 2013-05-05
  • 打赏
  • 举报
回复
引用 13 楼 supermegaboy 的回复:
全局数组可不是个好主意,可以做个singleton,然后A和B的构造函数以该单例为默认实参就行了。
借机请教下,您指的的通过文件进程间通信的方式,是怎么解决性能问题的。 同一个机器上可以内容共享,不同机器之间是不是只能频繁IO了? 以您的经验来看,还有什么好的进程间通信方式是值得推荐呢?
就是那个党伟 2013-05-03
  • 打赏
  • 举报
回复
引用 19 楼 chengshiding 的回复:
[quote=引用 13 楼 supermegaboy 的回复:] 全局数组可不是个好主意,可以做个singleton,然后A和B的构造函数以该单例为默认实参就行了。
这个方法好,解决了。 3Q[/quote] 。
chengshiding 2013-05-03
  • 打赏
  • 举报
回复
引用 13 楼 supermegaboy 的回复:
全局数组可不是个好主意,可以做个singleton,然后A和B的构造函数以该单例为默认实参就行了。
这个方法好,解决了。 3Q
chengshiding 2013-05-03
  • 打赏
  • 举报
回复
引用 11 楼 dw903632958 的回复:
还是全局省事吧, AB各存指针,找之
全局变量是方便,不过有点不优雅。
chengshiding 2013-05-03
  • 打赏
  • 举报
回复
引用 10 楼 mougaidong 的回复:
data 放在全局 A B 中都存放指向data 的指针
恩,全局变量总是可行的
赵4老师 2013-05-02
  • 打赏
  • 举报
回复
共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·……
飞天御剑流 2013-05-02
  • 打赏
  • 举报
回复
全局数组可不是个好主意,可以做个singleton,然后A和B的构造函数以该单例为默认实参就行了。
chengshiding 2013-05-02
  • 打赏
  • 举报
回复
好吧。
引用 10 楼 mougaidong 的回复:
data 放在全局 A B 中都存放指向data 的指针
好吧,好像只能这样了。
qq120848369 2013-05-02
  • 打赏
  • 举报
回复
把data放在C里,将C的指针传递给A和B,data的生命期跟着C走。
xxpyb 2013-05-02
  • 打赏
  • 举报
回复
class A{
private:
	char s[20];
public:
	void operator &()
	{
		cout<< &s<<endl;
	}
};
class B{
private:
	char s[20];
public:
	void operator &()
	{
		cout<< &s<<endl;
	}
};
union Storage
{
	class A a;
	class B b;
};
使用union,类继承与对象之间共享概念不一样。
就是那个党伟 2013-05-02
  • 打赏
  • 举报
回复
还是全局省事吧, AB各存指针,找之
turing-complete 2013-05-02
  • 打赏
  • 举报
回复
data 放在全局 A B 中都存放指向data 的指针
AndyStevens 2013-05-02
  • 打赏
  • 举报
回复
引用 7 楼 chengshiding 的回复:
[quote=引用 6 楼 Automation_dmu 的回复:] 观察者模式 。。
能给点代码吗[/quote]please google 之 ~
疯狂的红豆 2013-05-02
  • 打赏
  • 举报
回复
同样是继承还可以这样子:

#include <cstdlib>
#include <iostream>
using namespace std;
class Base
{
protected:
	int data[100];
public:
	Base()
	{
		//初始化数组
		memset(data, 0, 100);
	}
	virtual ~Base(){}
};

class TestA:public Base
{
public:
	//use data;
	TestA():Base()//这里直接调用父类的无参构造函数
	{
		//初始化TestA里的变量
	}
	~TestA(){}
	//其他的函数
private:
	//其他的数据
};

class TestB:public Base
{
public:
	TestB():Base()
	{
		//TestB类的数据初始化
	}
	~TestB(){}
	//其他的函数 use data
private:
	//其他的数据
};
chengshiding 2013-05-02
  • 打赏
  • 举报
回复
引用 6 楼 Automation_dmu 的回复:
观察者模式 。。
能给点代码吗
AndyStevens 2013-05-02
  • 打赏
  • 举报
回复
观察者模式 。。
chengshiding 2013-05-02
  • 打赏
  • 举报
回复
引用 3 楼 defonds 的回复:
方法很多吧。
好像感觉很多,但是自己不知道怎么搞。
chengshiding 2013-05-02
  • 打赏
  • 举报
回复
引用 2 楼 starytx 的回复:
继承应该可以吧,不正勿拍。
class A
{
public:
    static int data[100];
    void function()
    {
      // memset(  data ,1 ,sizeof(int)*100);
    }
};

class B : public A
{
public:
    void function()
    {
        // memset(  data ,0 ,sizeof(int)*100);
    }
};
类A和类B本来是平等的类,继承这个方法应该不可取,而且在C里还使用了它们。
Defonds 2013-05-02
  • 打赏
  • 举报
回复
方法很多吧。
starytx 2013-05-02
  • 打赏
  • 举报
回复
继承应该可以吧,不正勿拍。
class A
{
public:
    static int data[100];
    void function()
    {
      // memset(  data ,1 ,sizeof(int)*100);
    }
};

class B : public A
{
public:
    void function()
    {
        // memset(  data ,0 ,sizeof(int)*100);
    }
};
加载更多回复(1)

64,677

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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