c++-一个C++小程序运行错误,求大神帮忙看看

问题描述

一个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
{
//字符串不相等
}

时间: 2024-10-29 14:37:54

c++-一个C++小程序运行错误,求大神帮忙看看的相关文章

android-Android程序崩溃,求大神帮忙看看这是什么原因

问题描述 Android程序崩溃,求大神帮忙看看这是什么原因 如题,代码中没错误,但是每次运行到那个方法就自动退出了.这是Logcat中的error列表,谁知道是什么原因? 04-22 15:29:54.788: E/dalvikvm(3610): threadid=11: created from interp,name=Thread-3687 04-22 15:29:54.798: E/dalvikvm(3610): threadid=11: calling run(),name=Threa

Myeclipse把tomcat 6.0换成 tomcat 7.0出现这种错误求大神帮忙

问题描述 Myeclipse把tomcat 6.0换成 tomcat 7.0出现这种错误求大神帮忙 org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/eco]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase

flash-请问一个关于Print2Flash的问题,求大神帮忙

问题描述 请问一个关于Print2Flash的问题,求大神帮忙 http://www.cnblogs.com/flowwind/p/3411106.html 这篇博文中第3步: 3.在程序里引用Interop.Print2Flash3.dll,并调用如下代码,进行转换.这里的Interop.Print2Flash3.dll在哪儿啊,找不到啊

android 类qq空间图片查看器。出现好多错误 求大神帮忙。小女涉入甚浅。

问题描述 android 类qq空间图片查看器.出现好多错误 求大神帮忙.小女涉入甚浅. 11-20 11:26:39.629: E/AndroidRuntime(1136): FATAL EXCEPTION: main 11-20 11:26:39.629: E/AndroidRuntime(1136): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.desktop/co

maven运行出错,求大神帮忙解决

问题描述 maven运行出错,求大神帮忙解决 java.lang.ArrayIndexOutOfBoundsException: 24444 at org.objectweb.asm.ClassReader.(Unknown Source) at org.objectweb.asm.ClassReader.(Unknown Source) at org.objectweb.asm.ClassReader.(Unknown Source) at org.eclipse.jetty.annotati

嵌入式-cgi登陆程序出错,求大神帮忙

问题描述 cgi登陆程序出错,求大神帮忙 在linux下登陆arm开发板,用html和cgi写登陆程序.点击登陆后,浏览器显示the connection was reset,但是网址也调到了cgi程序的路径.程序应该是没错的.希望各位大神帮帮忙,分析一下到底是哪里出问题了,感激不尽.

xcode链接错误-求大神帮忙看看这个错误

问题描述 求大神帮忙看看这个错误 0 0x105dbf342 __assert_rtn + 144 1 0x105dfa2c6 archive::File::makeObjectFileForMember(archive::File::Entry const*) const + 1138 2 0x105df9c74 archive::File::justInTimeforEachAtom(char const*, ld::File::AtomHandler&) const + 122 3 0x1

想做一个柱状图的数据统计,求大神帮忙看看

问题描述 是用chart控件做的,我想问下从数据库提取数据时怎么分段查询出来并显示出来 解决方案 解决方案二:这是代码部分解决方案三:用百度的"echarts"解决方案四:http://echarts.baidu.com/doc/example/bar1.html

图片-求大神帮忙,用java对象方法做

问题描述 求大神帮忙,用java对象方法做 车轮类型不用考虑,就是普通的车轮. 解决方案 什么语言也没说,无非就是定义些类型,然后定义一些函数,其中车轮定义一个抽象类,派生不同的车轮.作为成员字段放在汽车类里. 这里有个C#的,http://blog.sina.com.cn/s/blog_4aaaa12b0100cvnv.html参考下 解决方案二: 分别为每个操作定义一个方法.在主函数中按需要的顺序调用就好了 解决方案三: 为每一个零件定义属性,为每一个操作定义方法,组合到一个类里 解决方案四