拷贝构造和运算符重载(我解决的问题)

  1. /*我在工作中自定义了一个类TParam,当里边只有一些基本类型(int,long...)的变量时,可以这样使用

        TParam test;
        test = GetValue("cpps");//GetValue为一个能返回TParam 类的函数

        这个时候的程序可以正常的运行。但是当我在类里添加了一个CStringArray类型的变量的时候,程序

        会报错:我自定义的类里没有添加拷贝构造函数和运算符‘=’的重载函数。后经过加上一切恢复正常。

        经验:
        // *********************************************
         |当我们在自定义的类里要添加非基本类型的时候,一定要注意重载运算符和些靠拷贝构造函数。|
         //*********************************************

  2. */
  3. //******************************************************************
  4.  * 文件名:TParam.h
  5.  * 
  6. //******************************************************************
  7. #include <afxcoll.h>
  8. class TParam  
  9. {
  10. public:
  11.  TParam();
  12.  virtual ~TParam();
  13.  CString value;
  14.  CString value1;
  15.  CString flag;
  16.  CString GetValue1();
  17.  void SetValue1(CString va);
  18.  CString GetValue();
  19.  void SetValue(CString va);
  20.  CString GetFlag();
  21.  void SetFlag(CString va);
  22. private:
  23.  CStringArray order; //设为私有,防止调用出错
  24. public:
  25.  TParam(const TParam &other);//拷贝构造
  26.  TParam & operator =(const TParam &other); //运算符重载
  27.  CString GetAt(int id);
  28.  void SetAt(int id,CString ord);
  29.  void SetSize(int size);
  30.  int GetSize();
  31. };
  32. //***********************************************************************
  33.  * 文件名:TParam.cpp
  34.  * 
  35. //***********************************************************************
  36. #include "TParam.h"
  37. #include <afxcoll.h>
  38. TParam::TParam()
  39. {
  40.  value = "";
  41.  value1 = "";
  42.  flag = "";
  43.  order.SetSize(1);
  44. }
  45. TParam::~TParam()
  46. {
  47.  order.RemoveAll();
  48. }
  49. void TParam::SetValue(CString va)
  50. {
  51.     value = va;
  52. }
  53. CString TParam::GetValue()
  54. {
  55.     return(value);
  56. }
  57. void TParam::SetValue1(CString va)
  58. {
  59.     value1 = va;
  60. }
  61. CString TParam::GetValue1()
  62. {
  63.     return(value1);
  64. }
  65. void TParam::SetFlag(CString va)
  66. {
  67.     flag = va;
  68. }
  69. CString TParam::GetFlag()
  70. {
  71.     return(flag);
  72. }
  73. //拷贝构造函数
  74. TParam::TParam(const TParam &other)
  75. {
  76.  int num = other.order.GetSize();
  77.  order.SetSize(num);
  78.  for (int i=0; i<num;i++)
  79.  {
  80.   order.SetAt(i,other.order.GetAt(i));
  81.  } 
  82.  value = other.value;
  83.  value1 = other.value1;
  84.  flag = other.flag;
  85. }
  86. //运算符 '=' 重载函数
  87. TParam & TParam::operator =(const TParam &other)
  88. {
  89.  if (this == &other)
  90.   return *this;
  91.  //释放原有的内存资源
  92.  order.RemoveAll();
  93.  //分配新的内存资源,并复制内容
  94.  int num = other.order.GetSize();
  95.  order.SetSize(num);
  96.  for (int i=0; i<num;i++)
  97.  {
  98.   order.SetAt(i,other.order.GetAt(i));
  99.  }
  100.  value = other.value;
  101.  value1 = other.value1;
  102.  flag = other.flag;
  103.  //返回本对象的指针
  104.  return *this;
  105. }
  106. void TParam::SetSize(int size)
  107. {
  108.  order.SetSize(size);
  109. }
  110. int TParam::GetSize()
  111. {
  112.  return (order.GetSize());
  113. }
  114. void TParam::SetAt(int id, CString ord)
  115. {
  116.  order.SetAt(id,ord);
  117. }
  118. CString TParam::GetAt(int id)
  119. {
  120.  return (order.GetAt(id));
  121. }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值