【发布时间】:2021-05-05 16:18:59
【问题描述】:
我有这个类,我正在尝试重载输入运算符,但我无法让它工作。 Ex2 准确地输出它应该输出的内容,但 ex13 在输入 2 个值后给我分段错误。 我不允许从“private:”访问说明符中更改变量的类型
作为输入,我需要写这个(或类似的):
14 戴尔 150这些输入用于(从罗马尼亚语翻译成英语):
序号 // 序号 生产者//制造商 nrPaginiPrintate // 打印页数 Imprimanta = 打印机这里是代码:
#include <string>
using namespace std;
class Imprimanta
{
private:
const int serialNumber;
char* producator;
int nrPaginiPrintate;
static string tipImprimanta;
public:
Imprimanta() :serialNumber(1)
{
this->producator = (char*)"";
this->nrPaginiPrintate = 0;
}
Imprimanta(int serialNumber, const char* producator, int nrPaginiPrintate) :serialNumber(serialNumber)
{
string* str = new string();
*str = producator;
this->producator = (char*)(str->c_str());
this->nrPaginiPrintate = nrPaginiPrintate;
}
~Imprimanta(){}
Imprimanta(const Imprimanta& i) :serialNumber(i.serialNumber) {
string* str = new string();
*str = i.producator;
this->producator = (char*)(str->c_str());
this->nrPaginiPrintate = i.nrPaginiPrintate;
this->tipImprimanta = i.tipImprimanta;
}
Imprimanta operator=(Imprimanta i) {
string* str = new string();
*str = i.producator;
this->producator = (char*)(str->c_str());
this->nrPaginiPrintate = i.nrPaginiPrintate;
this->tipImprimanta = i.tipImprimanta;
int* ptr;
ptr = (int*)(&serialNumber);
*ptr = i.serialNumber;
return *this;
}
bool operator<(Imprimanta t)
{
if (nrPaginiPrintate < t.nrPaginiPrintate) {
return true;
}
else {
return false;
}
}
int get_nrPaginiPrintate() {
return nrPaginiPrintate;
}
void set_nrPaginiPrintate(int pagini_print) {
this->nrPaginiPrintate = pagini_print;
}
static string getTipImprimanta()
{
return tipImprimanta;
}
static void setTipImprimanta(string tipImprimanta_a)
{
tipImprimanta = tipImprimanta_a;
}
int get_serialNumber() {
return serialNumber;
}
friend ostream& operator<<(ostream& out, const Imprimanta& e);
friend istream& operator>>(istream& in, Imprimanta& e);
};
string Imprimanta::tipImprimanta = "Cerneala";
ostream& operator<<(ostream& out, const Imprimanta& e)
{
out << "Serial Number: " << e.serialNumber << '\n';
out << "Producator: " << e.producator << '\n';
out << "Numar pagini printate: " << e.nrPaginiPrintate << '\n';
return out;
}
istream& operator>>(istream& in, Imprimanta& e)
{
int* ptr;
ptr = (int*)(&e.serialNumber);
in >> *ptr;
in >> e.producator;
in >> e.nrPaginiPrintate;
return in;
}
int main()
{
//2
cout << "-----------------------EX_2-----------------------";
cout << '\n';
Imprimanta i2(2, "Canon", 160);
cout << i2;
cout << '\n';
//13
cout << "-----------------------EX_13-----------------------";
cout << '\n';
Imprimanta i11;
cin >> i11;
cout << i11;
cout << '\n';
return 0;
}```
【问题讨论】:
标签: c++ class input segmentation-fault operator-overloading