Извините за название, я не знал, как это произнести.По сути, у меня есть нулевой указатель на объект формы, и когда были введены некоторые входные данные, я хочу, чтобы они были значениями для этого объекта формы;
shape *s = (shape *) 0;
cin >> *s;
if (s)
cout << "Shape" << (*s) << '\n';
else if (! cin.bad())
cout << "Read reached EOF\n";
else
cout << "Read failed\n";
Я перегрузил оператор <<, например,вызывает метод рисования любой формы; </p>
std::ostream& operator<< (std::ostream &os, shape &s){
s.draw();
return os;
}
Я пытаюсь прочитать мои значения в указателе.Тип ввода для моих данных выглядит так:
< Circle: (3,1) 1 >
Я перегружен оператор >>;
std::istream& operator>> (std::istream &is, shape &s){
char lessthan, greaterthan, opbrkt, clsbrkt, comma;
string shape_type;
double x1, y1, r, x2, y2, x3, y3;
if (is >> lessthan) {
if ('<' != lessthan) {
is.setstate(ios::badbit);
return is;
}
//Circle implemntation
if(is >> shape_type && shape_type == "Circle:"){
if(!((is >> opbrkt) && (opbrkt = '('))) {
is.setstate(ios::badbit);
return is;
}
cout << "Yes" << i++;
if(!(is >> x1)){
is.setstate(ios::badbit);
return is;
}
if(!(is >> comma && comma == ',')){
is.setstate(ios::badbit);
return is;
}
if(!(is >> y1)){
is.setstate(ios::badbit);
return is;
}
if(!(is >> clsbrkt && clsbrkt == ')')) {
is.setstate(ios::badbit);
return is;
}
if(!(is >> r)){
is.setstate(ios::badbit);
return is;
}
if(!(is >> clsbrkt && clsbrkt == '>')) {
is.setstate(ios::badbit);
return is;
}
}
return is;
}
return is;
}
Это в основном обнаруживает, что это круг и помещает соответствующие впеременные для последующего использования, но как мне получить эти данные в указателе 's', чтобы указать, что теперь должно быть объектом круга?