问题描述
- 一个C++小程序运行错误,求大神帮忙看看
-
#include
#include "stdafx.h"
using namespace std;/* run this program using the console pauser or add your own getch, system("pause") or input loop /
class cartp
{
public:
virtual char getcar()=0;
};
class BMW:public cartp
{
public:
char* getcar()
{
return "BMW";
}
};
class BENZ:public cartp
{
public:
char* getcar()
{
return "BENZ";
}
};
class carfactory
{
public:
static cartp* getcarname(char* name)
{
if(name=="BMW")
{
return new BMW();
}
else if(name=="BENZ")
{
return new BENZ();
}
else
{
return NULL;
}
}
};
int main(int argc, char** argv)
{
char name[20]={0};
char* car=name;
cout<<"input cartype:";
cin>>name;
cartp* cc=carfactory::getcarname(car);
cout<<"type is"<getcar()<<endl;
return 0;
}
解决方案
class cartp
{
public:
virtual char* getcar()=0;
};
class BMW:public cartp
{
public:
char* getcar()
{
return "BMW";
}
};
class BENZ:public cartp
{
public:
char* getcar()
{
return "BENZ";
}
};
class carfactory
{
public:
static cartp* getcarname(char* name)
{
if(strcmp(name,"BMW") == 0)
{
return new BMW();
}
else if(strcmp(name,"BENZ") == 0)
{
return new BENZ();
}
else
{
return NULL;
}
}
};
int main(int argc, char** argv)
{
char name[20] = {0};
char* car = name;
cout<<"input cartype:";
cin>>name;
cartp* cc = carfactory::getcarname(car);
cout<<"type is"<<cc->getcar()<<endl;
return 0;
}
解决方案二:
BMW类重写虚函数时返回值不对。
解决方案三:
strcmp(name, "BMW") == 0 strcmp(name, "BENZ") == 0
这里应该是这样才能比较的
解决方案四:
strcmp(name, "BMW") == 0 strcmp(name, "BENZ") == 0
这里应该是这样才能比较的
解决方案五:
strcmp(name, "BMW") == 0 strcmp(name, "BENZ") == 0
这里应该是这样才能比较的
解决方案六:
#include "stdafx.h"
using namespace std;
class cartp
{
public:
virtual char* getcar()=0;
};
class BMW:public cartp
{
public:
char* getcar()
{
return "BMW";
}
};
class BENZ:public cartp
{
public:
char* getcar()
{
return "BENZ";
}
};
class carfactory
{
public:
static cartp* getcarname(char* name)
{
if(name=="BMW")
{
return new BMW();
}
else if(name=="BENZ")
{
return new BENZ();
}
else
{
return NULL;
}
}
};
int main(int argc, char** argv)
{
char name[20]={0};
char* car=name;
cout<<"input cartype:";
cin>>name;
cartp* cc=carfactory::getcarname(car);
cout<<"type is"<getcar()<<endl;
return 0;
}
1.你这不是运行错误,编译都过不去。两处,第一cartp类virtual char getcar()=0;是应该返回char*的。*忘记了。第二处main函数cout<<"type is"<getcar()<<endl;错误,首先这个getcar函数要通过对象或者指针调用但此处只能是指针。另外少一个'<'语法错误。
2.这个小程序的用意是使用一下多态的意思,可能是一个简单的工厂模式。
解决方案七:
else if(name=="BENZ")
name不能直接比较,要用strcmp
或者你把name赋值给string对象,然后可以用==比较
解决方案八:
strcmp(name, "BMW") == 0 strcmp(name, "BENZ") == 0
字符串应该这样比较
解决方案九:
嗯。一眼就看到 name=="BMW" ,双等号对比的估计是内存地址,而不是值;
C++中对于数字类型的数据我们可以直接使用"=="即可比较是否相等,但是对于字符串的比较并不适用。我们可以利用以下的两个函数来比较两个字符串是否相等。
1、strcmp
这是用于ANSI标准字符串的函数(如string和char *),此函数接受两个字符串缓冲区做为参数,如果两个字符串是相同的则返回零。否则若第一个传入的字符串的值大于第二个字符串返回值将会大于零,若传入的第一个字符串的值小于第二个字符串返回值将小于零。
char *ch="翔翔糖糖";
if(strcmp(ch,"翔翔糖糖")==0)
{
//字符串相等
}
else
{
//字符串不相等
}
2、wcscmp
这个函数是strcmp所对应的Unicode系列的函数,它的使用方法和strcmp相同,它用来比较两个Unicode字符串是否相等(如wstring和wchar_t *)。
wchar_t *ch=L"翔翔糖糖";
if(wcscmp(ch,L"翔翔糖糖")==0)
{
//字符串相等
}
else
{
//字符串不相等
}