重载等于呼叫不起作用

时间:2015-02-18 00:18:15

标签: c++ class

我似乎在修复这里的东西,因为当我运行程序时,我得到了输出: 由于目前没有有效信息,因此无法禁用您的Grocery信息 无论我为Grocery Id和Name输入什么。 以下是我的班级定义:

 3 #include <iostream>
  4 using namespace std;
  5 Grocery::Grocery(){
  6         id =0;
  7         name=nullptr;
  8 }
  9 Grocery::Grocery(char* ProductName,int Productid){
 10         if (id < 0 || name == nullptr) {
 11                 id =0;
 12                 name=nullptr;
 13         }
 14         else{
 15                 name=new char[strlen(ProductName)+1];
 16                 strcpy(name,ProductName);
 17                 id=Productid;
 18         }
 19 }
 20 Grocery::Grocery(Grocery &src){
 21                 id=src.id;
 22                 if (src.name==nullptr) {
 23                         name = new char[strlen(src.name+1)];
 24                         strcpy(name,src.name);
 25                 }
 26                 else
 27                         name=nullptr;
 28 }
 29 Grocery::~Grocery(){
 30         delete [] name;
 31         name = nullptr;
 32 }
 33 void Grocery::display() const{
 34         if (id == 0 && name == nullptr)
 35                 cout<<"Unable to disable your Grocery's information as there is no valid information at this time"<<endl;
 36         else
 37                 cout<<"The Grocery's id is "<< id <<" and the name of the item is "<< name;
 38 }
 39 bool Grocery::isGreaterThan(const Grocery &src)const{
 40         if(id>src.id)
 41                 return true;
 42         else
 43                 return false;
 44 }
 45 Grocery& Grocery::Grocery::operator=(const Grocery& src){
 46         if (this !=&src) {
 47                 id=src.id;
 48                 delete [] name;
 49         }
 50         if (src.name != nullptr) {
 51                 name = new char[strlen(src.name) + 1];
 52                 strcpy(name,src.name);
 53         }
 54         else
 55                 name = nullptr;
 56         return *this;
 57 }

我假设我在我的课程定义中修复一些相当简单的东西,但任何帮助都会很好。

1 个答案:

答案 0 :(得分:0)

Grocery::Grocery(char* ProductName,int Productid){
    if (id < 0 || name == nullptr) {

这似乎是你的大问题。当您应该检查idname构造函数参数时,您正在检查尚未初始化的ProductNameProductid类成员。

您可能会获得id的半随机垃圾值,而这些值可能最终会消极。