C++ 操作员过载>&燃气轮机;cin

C++ 操作员过载>&燃气轮机;cin,c++,class,inheritance,operator-overloading,C++,Class,Inheritance,Operator Overloading,我需要重载>操作符,但我没有看到任何错误。 当我超载时,仅操作员>(istream&stream,vehicle&v); friend ostream&operator(istream&stream、vehicle&v) { 流>>v.number; 流>>年; 流>>v.成本; 流>>v.make; 流>>v.model; 流>>v.bodyStyle; 流>>v.color; 回流; } ostream&operator您好,您可能想学习这段代码,它在使用GCC HEAD 8编译器时编译时没

我需要重载>操作符,但我没有看到任何错误。 当我超载时,仅操作员>(istream&stream,vehicle&v); friend ostream&operator(istream&stream、vehicle&v) { 流>>v.number; 流>>年; 流>>v.成本; 流>>v.make; 流>>v.model; 流>>v.bodyStyle; 流>>v.color; 回流; }
ostream&operator您好,您可能想学习这段代码,它在使用GCC HEAD 8编译器时编译时没有错误和警告。我会及时回答关于我的代码的任何问题

你好,米莎

#include <iostream>

// Don't use <blah.h>, prefer using <cblah>.
#include <cstring>
#include <cassert>

// extra includes.
#include <string>
#include <sstream>

using namespace std;

class vehicle
{
    friend ostream& operator<< (ostream& stream, vehicle const& v);
    friend istream& operator>> (istream& stream, vehicle& v);

protected:
    int number, year, cost;
    char *make, *model, *bodyStyle, *color;

public:
    vehicle(int = 0, 
            int = 0, 
            char const* = "-",    // Don't choose NULL here - prevents segmentation fault in main!
            char const* = "-", 
            char const* = "-", 
            char const* = "-", 
            int = 0);

    ~vehicle();
};

vehicle::vehicle(int a, 
                 int b, 
                 char const* ma1, 
                 char const* mod1, 
                 char const* bs1, 
                 char const* c1, 
                 int cos)
{
    number = a;
    year   = b;

    make = new char[strlen(ma1) + 1];
    assert(make);
    strcpy(make, ma1);

    model = new char[strlen(mod1) + 1];
    assert(model);
    strcpy(model, mod1);

    bodyStyle = new char[strlen(bs1) + 1];
    assert(bodyStyle);
    strcpy(bodyStyle, bs1);

    color = new char[strlen(c1) + 1];
    assert(color);
    strcpy(color, c1);

    cost = cos;
}

vehicle::~vehicle()
{
    if (make)      delete[] make;
    if (model)     delete[] model;
    if (bodyStyle) delete[] bodyStyle;
    if (color)     delete[] color;
}

ostream& operator<< (ostream& stream, vehicle const& v)
{
    stream << v.number    << endl;
    stream << v.year      << endl;
    stream << v.cost      << endl;
    stream << v.make      << endl;
    stream << v.model     << endl;
    stream << v.bodyStyle << endl;
    stream << v.color     << endl;

    return stream;
}

istream& operator>> (istream& stream,  vehicle& v)
{
    stream >> v.number;
    stream >> v.year;
    stream >> v.cost;
    stream >> v.make;
    stream >> v.model;
    stream >> v.bodyStyle;
    stream >> v.color;

    return stream;
}



class Truckvehicle : public vehicle
{
    friend ostream& operator<< (ostream& stream, Truckvehicle const& tv);
    friend istream& operator>> (istream& stream, Truckvehicle& tv);

    int  passengers, mileage, grossWeight, tempGross;
    char *poweredBy;

public:
    Truckvehicle(int = 0, 
                 int = 0, 
                 char const* = "-", 
                 char const* = "-", 
                 char const* = "-", 
                 char const* = "-", 
                 int = 0, 
                 int = 0, 
                 int = 0, 
                 int = 0, 
                 char const* = "-", 
                 int = 0);

    ~Truckvehicle();
};

Truckvehicle::Truckvehicle(int a, 
                           int b, 
                           char const* ma1, 
                           char const* mod1, 
                           char const* bs1, 
                           char const* c1, 
                           int cos, 
                           int pass1, 
                           int mil, 
                           int gross, 
                           char const* pb, 
                           int tg)
    :
    vehicle(a, b, ma1, mod1, bs1, c1, cos)
{
    passengers  = pass1;
    mileage     = mil;
    grossWeight = gross;

    poweredBy = new char[strlen(pb) + 1];
    assert(poweredBy);
    strcpy(poweredBy, pb);

    tempGross = tg;
}

Truckvehicle::~Truckvehicle()
{
    delete[] poweredBy;
}

ostream& operator<< (ostream& stream, Truckvehicle const& tv)
{
    // vehicle part.
    stream <<tv.number      <<endl;
    stream <<tv.year        <<endl;
    stream <<tv.make        <<endl;
    stream <<tv.model       <<endl;
    stream <<tv.bodyStyle   <<endl;
    stream <<tv.color       <<endl;
    stream <<tv.cost        <<endl;

    // extra truck part.
    stream <<tv.passengers  <<endl;
    stream <<tv.mileage     <<endl;
    stream <<tv.grossWeight <<endl;
    stream <<tv.poweredBy   <<endl;
    stream <<tv.tempGross   <<endl;

    return stream;
}

istream& operator>> (istream& stream, Truckvehicle& tv)
{
    // vehicle part.
    stream >>tv.number;
    stream >>tv.year;
    stream >>tv.make;
    stream >>tv.model;
    stream >>tv.bodyStyle;
    stream >>tv.color;
    stream >>tv.cost;

    // extra truck part.
    stream >>tv.passengers;
    stream >>tv.mileage;
    stream >>tv.grossWeight;
    stream >>tv.poweredBy;
    stream >>tv.tempGross;

    return stream;
}


// Simulates usage of std::operator>> ().
void initializeTruckvehicle(Truckvehicle& TV, 
                           int a, 
                           int b, 
                           char const* ma1, 
                           char const* mod1, 
                           char const* bs1, 
                           char const* c1, 
                           int cos, 
                           int pass1, 
                           int mil, 
                           int gross, 
                           char const* pb, 
                           int tg)
{
    string s;

    s += static_cast <ostringstream *> (&( ostringstream() << a )) -> str();
    s += " ";

    s += static_cast <ostringstream *> (&( ostringstream() << b )) -> str();
    s += " ";

    s += ma1;
    s += " ";

    s += mod1;
    s += " ";

    s += bs1;
    s += " ";

    s += c1;
    s += " ";

    s += static_cast <ostringstream *> (&( ostringstream() << cos   )) -> str();
    s += " ";

    s += static_cast <ostringstream *> (&( ostringstream() << pass1 )) -> str();
    s += " ";

    s += static_cast <ostringstream *> (&( ostringstream() << mil   )) -> str();
    s += " ";

    s += static_cast <ostringstream *> (&( ostringstream() << gross )) -> str();
    s += " ";

    s += pb;
    s += " ";

    s += static_cast <ostringstream *> (&( ostringstream() << tg    )) -> str();
    s += " ";

    istringstream in(s);
    in >> TV;
}



int main()
{
    cout << "Truck 1>" << endl;

    Truckvehicle TV1 (111111, 
                      2014, 
                      "Toyota", 
                      "Tacoma", 
                      "4X4", 
                      "Black", 
                      25000, 
                      2, 
                      15000, 
                      333333, 
                      "Gas", 
                      222222);
    cout << TV1;


    cout << "Truck 2>" << endl;

    Truckvehicle TV2;
    cout << TV2;


    cout << "Truck 3>" << endl;

    Truckvehicle TV3;
    initializeTruckvehicle (TV3, 
                            111111, 
                            2014, 
                            "Toyota", 
                            "Tacoma", 
                            "4X4", 
                            "Black", 
                            25000, 
                            2, 
                            15000, 
                            333333, 
                            "Gas", 
                            222222);
    cout << TV3;
}
#包括
//不要使用,更喜欢使用。
#包括
#包括
//额外费用包括在内。
#包括
#包括
使用名称空间std;
等级车辆
{
friend ostream&operator>(istream&stream、vehicle&v);
受保护的:
整数、年份、成本;
字符*品牌,*型号,*车身风格,*颜色;
公众:
车辆(int=0,
int=0,
char const*=“-”,//此处不要选择NULL-防止main中出现分段错误!
字符常量*=“-”,
字符常量*=“-”,
字符常量*=“-”,
int=0);
~vehicle();
};
车辆:车辆(int a,
int b,
字符常量*ma1,
字符常量*mod1,
字符常量*bs1,
字符常量*c1,
int cos)
{
数字=a;
年份=b;
make=新字符[strlen(ma1)+1];
断言(制造);
strcpy(make,ma1);
模型=新字符[strlen(mod1)+1];
断言(模型);
strcpy(模型,mod1);
bodyStyle=新字符[strlen(bs1)+1];
断言(车身风格);
strcpy(车身样式,bs1);
颜色=新字符[strlen(c1)+1];
断言(颜色);
strcpy(彩色,c1);
成本=成本;
}
车辆::~vehicle()
{
如果(make)删除[]make;
如果(模型)删除[]模型;
如果(bodyStyle)删除[]bodyStyle;
如果(颜色)删除[]颜色;
}
ostream和operator>v.color;
回流;
}
货车类别:公共车辆
{
friend ostream&operator>(istream&stream、卡车与电视);
int乘客、里程、总里程、总里程、总里程;
char*poweredBy;
公众:
货车(整数=0,
int=0,
字符常量*=“-”,
字符常量*=“-”,
字符常量*=“-”,
字符常量*=“-”,
int=0,
int=0,
int=0,
int=0,
字符常量*=“-”,
int=0);
~Truckvehicle();
};
货车,
int b,
字符常量*ma1,
字符常量*mod1,
字符常量*bs1,
字符常量*c1,
int cos,
int pass1,
整数mil,
总整数,
字符常量*pb,
整数(tg)
:
车辆(a、b、ma1、mod1、bs1、c1、cos)
{
乘客=pass1;
里程=mil;
总重量=总重量;
poweredBy=newchar[strlen(pb)+1];
断言(poweredBy);
strcpy(poweredBy,pb);
tempGross=tg;
}
卡车司机::~Truckvehicle()
{
删除[]poweredBy;
}

ostream和操作员“弹出”?当使用
std::cin
时,您只需在控制台中键入。它只是给了我。cpp停止工作错误看在上帝的份上,请使用std::string。您知道如何使用调试器吗?不幸的是,您的
操作符>
函数将尝试写入
char*
参数,无论其当前大小如何,这可能是个坏消息。这就是为什么我们有
std::string
#include <iostream>

// Don't use <blah.h>, prefer using <cblah>.
#include <cstring>
#include <cassert>

// extra includes.
#include <string>
#include <sstream>

using namespace std;

class vehicle
{
    friend ostream& operator<< (ostream& stream, vehicle const& v);
    friend istream& operator>> (istream& stream, vehicle& v);

protected:
    int number, year, cost;
    char *make, *model, *bodyStyle, *color;

public:
    vehicle(int = 0, 
            int = 0, 
            char const* = "-",    // Don't choose NULL here - prevents segmentation fault in main!
            char const* = "-", 
            char const* = "-", 
            char const* = "-", 
            int = 0);

    ~vehicle();
};

vehicle::vehicle(int a, 
                 int b, 
                 char const* ma1, 
                 char const* mod1, 
                 char const* bs1, 
                 char const* c1, 
                 int cos)
{
    number = a;
    year   = b;

    make = new char[strlen(ma1) + 1];
    assert(make);
    strcpy(make, ma1);

    model = new char[strlen(mod1) + 1];
    assert(model);
    strcpy(model, mod1);

    bodyStyle = new char[strlen(bs1) + 1];
    assert(bodyStyle);
    strcpy(bodyStyle, bs1);

    color = new char[strlen(c1) + 1];
    assert(color);
    strcpy(color, c1);

    cost = cos;
}

vehicle::~vehicle()
{
    if (make)      delete[] make;
    if (model)     delete[] model;
    if (bodyStyle) delete[] bodyStyle;
    if (color)     delete[] color;
}

ostream& operator<< (ostream& stream, vehicle const& v)
{
    stream << v.number    << endl;
    stream << v.year      << endl;
    stream << v.cost      << endl;
    stream << v.make      << endl;
    stream << v.model     << endl;
    stream << v.bodyStyle << endl;
    stream << v.color     << endl;

    return stream;
}

istream& operator>> (istream& stream,  vehicle& v)
{
    stream >> v.number;
    stream >> v.year;
    stream >> v.cost;
    stream >> v.make;
    stream >> v.model;
    stream >> v.bodyStyle;
    stream >> v.color;

    return stream;
}



class Truckvehicle : public vehicle
{
    friend ostream& operator<< (ostream& stream, Truckvehicle const& tv);
    friend istream& operator>> (istream& stream, Truckvehicle& tv);

    int  passengers, mileage, grossWeight, tempGross;
    char *poweredBy;

public:
    Truckvehicle(int = 0, 
                 int = 0, 
                 char const* = "-", 
                 char const* = "-", 
                 char const* = "-", 
                 char const* = "-", 
                 int = 0, 
                 int = 0, 
                 int = 0, 
                 int = 0, 
                 char const* = "-", 
                 int = 0);

    ~Truckvehicle();
};

Truckvehicle::Truckvehicle(int a, 
                           int b, 
                           char const* ma1, 
                           char const* mod1, 
                           char const* bs1, 
                           char const* c1, 
                           int cos, 
                           int pass1, 
                           int mil, 
                           int gross, 
                           char const* pb, 
                           int tg)
    :
    vehicle(a, b, ma1, mod1, bs1, c1, cos)
{
    passengers  = pass1;
    mileage     = mil;
    grossWeight = gross;

    poweredBy = new char[strlen(pb) + 1];
    assert(poweredBy);
    strcpy(poweredBy, pb);

    tempGross = tg;
}

Truckvehicle::~Truckvehicle()
{
    delete[] poweredBy;
}

ostream& operator<< (ostream& stream, Truckvehicle const& tv)
{
    // vehicle part.
    stream <<tv.number      <<endl;
    stream <<tv.year        <<endl;
    stream <<tv.make        <<endl;
    stream <<tv.model       <<endl;
    stream <<tv.bodyStyle   <<endl;
    stream <<tv.color       <<endl;
    stream <<tv.cost        <<endl;

    // extra truck part.
    stream <<tv.passengers  <<endl;
    stream <<tv.mileage     <<endl;
    stream <<tv.grossWeight <<endl;
    stream <<tv.poweredBy   <<endl;
    stream <<tv.tempGross   <<endl;

    return stream;
}

istream& operator>> (istream& stream, Truckvehicle& tv)
{
    // vehicle part.
    stream >>tv.number;
    stream >>tv.year;
    stream >>tv.make;
    stream >>tv.model;
    stream >>tv.bodyStyle;
    stream >>tv.color;
    stream >>tv.cost;

    // extra truck part.
    stream >>tv.passengers;
    stream >>tv.mileage;
    stream >>tv.grossWeight;
    stream >>tv.poweredBy;
    stream >>tv.tempGross;

    return stream;
}


// Simulates usage of std::operator>> ().
void initializeTruckvehicle(Truckvehicle& TV, 
                           int a, 
                           int b, 
                           char const* ma1, 
                           char const* mod1, 
                           char const* bs1, 
                           char const* c1, 
                           int cos, 
                           int pass1, 
                           int mil, 
                           int gross, 
                           char const* pb, 
                           int tg)
{
    string s;

    s += static_cast <ostringstream *> (&( ostringstream() << a )) -> str();
    s += " ";

    s += static_cast <ostringstream *> (&( ostringstream() << b )) -> str();
    s += " ";

    s += ma1;
    s += " ";

    s += mod1;
    s += " ";

    s += bs1;
    s += " ";

    s += c1;
    s += " ";

    s += static_cast <ostringstream *> (&( ostringstream() << cos   )) -> str();
    s += " ";

    s += static_cast <ostringstream *> (&( ostringstream() << pass1 )) -> str();
    s += " ";

    s += static_cast <ostringstream *> (&( ostringstream() << mil   )) -> str();
    s += " ";

    s += static_cast <ostringstream *> (&( ostringstream() << gross )) -> str();
    s += " ";

    s += pb;
    s += " ";

    s += static_cast <ostringstream *> (&( ostringstream() << tg    )) -> str();
    s += " ";

    istringstream in(s);
    in >> TV;
}



int main()
{
    cout << "Truck 1>" << endl;

    Truckvehicle TV1 (111111, 
                      2014, 
                      "Toyota", 
                      "Tacoma", 
                      "4X4", 
                      "Black", 
                      25000, 
                      2, 
                      15000, 
                      333333, 
                      "Gas", 
                      222222);
    cout << TV1;


    cout << "Truck 2>" << endl;

    Truckvehicle TV2;
    cout << TV2;


    cout << "Truck 3>" << endl;

    Truckvehicle TV3;
    initializeTruckvehicle (TV3, 
                            111111, 
                            2014, 
                            "Toyota", 
                            "Tacoma", 
                            "4X4", 
                            "Black", 
                            25000, 
                            2, 
                            15000, 
                            333333, 
                            "Gas", 
                            222222);
    cout << TV3;
}