C++ 类和对象的区别

做项目时,因为要获取一个类A的数据,就定义了该类的一个全局变量,然后通过这个全局变量在类C去调用类A的成员函数,开始发现pop处理的数据一直为零导致后面没有输出。找了半天发现在另外一个类B的中定义了类A的对象指针,然后数据都是通过类A的对象指针返回的。刚开始不理解,通过类的对象去访问数据没有问题啊,后来才明白类的不同实例之间没有关系啊,数据不是共享的。《C ++ Primer》一书中P375也对这次有详尽描述,“每个对象都具有自己类数据成员的副本。修改item的数据成员不会改变任何其他Sales_item对象的数据成员。” 

有三个类

class COjectA
{
public:
	COjectA(void);
	~COjectA(void);
	TYPE InPut(); 插入数据到m_DataList</span>

	bool PopData(TYPE &type); //
	vector<TYPE> m_DataList; 
};

class COjectB
{
public:
	COjectB();
	~COjectB();
	static void * CheckData(void *param);
	COjectA* m_pCOjectA;  //实例化一个对象

};

void * COjectB::CheckData( void *param )
{
	if (m_pCOjectA != NULL)
	{
		TYPE type = m_pCOjectA->InPut();
	}
}
在COjectB中定义了COjectA的一个对象调用Input函数。然后想在COjectC中获取到mDataList的值,就在“COjectA.h”和“COjectA.cpp”中定义了全局变量声明和定义,有一个线程调用PopData这个函数,发现数据为零。

class COjectC
{
public:
	static void * DoDealData(void *param);
};

void * COjectC::DoDealData( void *param )
{
	if (g_COjectA.PopData())   //error
	{
	}
}


这些都基础,却花了一段时间去找错不应该。

解决办法:1. 将COjectB中的

COjectA* m_pCOjectA; 

也改为全局调用,
g_COjectA.Input()


2. 在COjectC中写一个函数传递一个COjectA对象的指针类型。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值