-
/*我在工作中自定义了一个类TParam,当里边只有一些基本类型(int,long...)的变量时,可以这样使用
TParam test;
test = GetValue("cpps");//GetValue为一个能返回TParam 类的函数这个时候的程序可以正常的运行。但是当我在类里添加了一个CStringArray类型的变量的时候,程序
会报错:我自定义的类里没有添加拷贝构造函数和运算符‘=’的重载函数。后经过加上一切恢复正常。
经验:
// *********************************************
|当我们在自定义的类里要添加非基本类型的时候,一定要注意重载运算符和些靠拷贝构造函数。|
//********************************************* - */
- //******************************************************************
- * 文件名:TParam.h
- *
- //******************************************************************
- #include <afxcoll.h>
- class TParam
- {
- public:
- TParam();
- virtual ~TParam();
- CString value;
- CString value1;
- CString flag;
- CString GetValue1();
- void SetValue1(CString va);
- CString GetValue();
- void SetValue(CString va);
- CString GetFlag();
- void SetFlag(CString va);
- private:
- CStringArray order; //设为私有,防止调用出错
- public:
- TParam(const TParam &other);//拷贝构造
- TParam & operator =(const TParam &other); //运算符重载
- CString GetAt(int id);
- void SetAt(int id,CString ord);
- void SetSize(int size);
- int GetSize();
- };
- //***********************************************************************
- * 文件名:TParam.cpp
- *
- //***********************************************************************
- #include "TParam.h"
- #include <afxcoll.h>
- TParam::TParam()
- {
- value = "";
- value1 = "";
- flag = "";
- order.SetSize(1);
- }
- TParam::~TParam()
- {
- order.RemoveAll();
- }
- void TParam::SetValue(CString va)
- {
- value = va;
- }
- CString TParam::GetValue()
- {
- return(value);
- }
- void TParam::SetValue1(CString va)
- {
- value1 = va;
- }
- CString TParam::GetValue1()
- {
- return(value1);
- }
- void TParam::SetFlag(CString va)
- {
- flag = va;
- }
- CString TParam::GetFlag()
- {
- return(flag);
- }
- //拷贝构造函数
- TParam::TParam(const TParam &other)
- {
- int num = other.order.GetSize();
- order.SetSize(num);
- for (int i=0; i<num;i++)
- {
- order.SetAt(i,other.order.GetAt(i));
- }
- value = other.value;
- value1 = other.value1;
- flag = other.flag;
- }
- //运算符 '=' 重载函数
- TParam & TParam::operator =(const TParam &other)
- {
- if (this == &other)
- return *this;
- //释放原有的内存资源
- order.RemoveAll();
- //分配新的内存资源,并复制内容
- int num = other.order.GetSize();
- order.SetSize(num);
- for (int i=0; i<num;i++)
- {
- order.SetAt(i,other.order.GetAt(i));
- }
- value = other.value;
- value1 = other.value1;
- flag = other.flag;
- //返回本对象的指针
- return *this;
- }
- void TParam::SetSize(int size)
- {
- order.SetSize(size);
- }
- int TParam::GetSize()
- {
- return (order.GetSize());
- }
- void TParam::SetAt(int id, CString ord)
- {
- order.SetAt(id,ord);
- }
- CString TParam::GetAt(int id)
- {
- return (order.GetAt(id));
- }