c++关于虚函数,初始化成员列表,string运行错误问题

查看:165
本文介绍了c++关于虚函数,初始化成员列表,string运行错误问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

运行这段代码,每次输入都为2,结果color 后是空的?如果我改color为int型运行正确了,这是为什么?

#include<cstring>
#include<iostream>
using namespace std;
class ABC
{
private:
    string label="0";
    int rating=0;
protected:
    string Label(){return label;}   
    int Rating(){return rating;}
public:
    ABC(string la="null",int ra=-1):label(la),rating(ra){}   
    virtual void ViewABC()=0;   

};

class lacksDMA:public ABC
{
private:
    string color;
public:
    lacksDMA(string co="null",string la="null",int ra=-1):ABC(la,ra),color(co){}
    virtual void ViewABC()
    {
        cout<<"\n\nLabel:"<<Label()<<endl;
        cout<<"Rating:"<<Rating()<<endl;
        cout<<"Color:"<<color<<endl;  //不显示color值?
    }
};
const int CLIMITES=1;


int main()
{
    char c,choose;

    ABC *pDMA[CLIMITES];
    string latemp,cotemp,sttemp;
    int ratemp;


    for(int i=0; i<CLIMITES; i++)
    {
        cout<<"Label is :";
        getline(cin,latemp);
        cout<<"rating is :";
        cin>>ratemp;




        cout<<"Color is :";
        getline(cin,cotemp);
        pDMA[i]=new lacksDMA(cotemp,latemp,ratemp);


        while(cin.get()!='\n')
            continue;

    }
    for(int i=0; i<CLIMITES; i++)
    {
        pDMA[i]->ViewABC();
    }

}

解决方案

问题在于你混用cin 和 getline。

cout<<"rating is :";
cin>>ratemp;         // 这行输入`2<enter>`。执行完cin 不会把'\n'丢掉。
cout<<"Color is :";
getline(cin,cotemp); // 这行直接读到之前输入的'\n'

如果你一定要混用的话,可以在cin之后加上

cin.ignore ( std::numeric_limits<std::streamsize>::max(),'\n');

这篇关于c++关于虚函数,初始化成员列表,string运行错误问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆