Red Planet
Почему Вы не закрываете файл "res.txt"?
А почему просто не написать
ofstream to_res ("res.txt");
Почему Вы не закрываете файл "res.txt"?
А почему просто не написать
ofstream to_res ("res.txt");
ofstream to_res ("res.txt");
Решил создать multimap <int, string, comp>
// ---------------------------------------------------------------------------
#include <vcl>
#include <iostream>
#pragma hdrstop
using namespace std;
class X {
protected: int c, d;
public: X () {c=1; d=1;}
friend ostream& operator << (ostream &s, const X &t) {
s <<"("<<t.c<<", "<<t.d<<")."<<endl;
return s;
}
};
class Y:public X {
public: Y () {c+=2; d+=2;}
};
int _tmain (int argc, _TCHAR* argv[]) {
X x1;
Y y1;
cout <<x1<<y1<<endl;
system ("pause");
return 0;
}
class X {
protected: int c, d;
public: X () {c=1; d=1;}
friend ostream& operator << (ostream &s, const X &);
};
class Y:public X {
protected: Y *pr;
public: Y () {pr=0;}
Y& operator = (const Y&);
Y& operator = (const X&);
friend ostream& operator << (ostream &s, const Y &);
};
// не работает
Y& Y::operator =(const X &right) {
c=right.c;
d=right.d;
return *this;
}
если я вас правильно понял, то объект класса Y преобразуется неявно в объект класса X, который потом и выводится.Почти. Не объект преобразуется, а ссылка на него. Сам объект тот же, копий не делается.
Ведь защищенные члены базового становятся при публичном наследовании защищенными членами производного. Что здесь не так?не так "становятся". Не "становятся", а "доступны", потому что наследуются. Просто X есть часть Y. Ты же обращается к right как к отдельной сущности, разумеется при этом задействован его публичный интерфейс.
Y& Y::operator =(const X &right) {
c=right.c;
d=right.d;
return *this;
}
Выход: сделать с и d в базовом классе публичными.
int get_c() const { return c;}
int get_d() const { return d;}
Non-const function called for const object
ну если бы я ни разу не пробовал компилировать, то откуда бы я мог знать, что функция поиска возвращает отрицательные значения?
Ну мало ли. Может препод сказал.
У меня ваш код вообще не компилируется.
Может конечно стандарт С из Dev-C++ так сильно отличается от стандарта С VS2008 (вообще конечно МС зачастую грешит некоторыми отступлениями от стандарта).
А может вы выложили не тот код.
Как минимум or в С - это что-то новое.
class A {
protected: double x, y;
public: A () {x=1; y=1;}
double get_x () {return x;}
double get_y () {return y;}
};
class B:public A {
B *prev;
public: B () {prev=0;}
B (const B &);
~B () {delete prev;}
B& operator = (const A &);
B& operator = (const B &);
friend ostream& operator << (ostream &, const B &);
friend B operator + (B, A);
};
// Копирующий конструктор наследника.
B::B (const B &right) {
prev=0;
x=right.x;
y=right.y;
}
// Присваивание экземпляру наследника экземпляра родителя.
B& B::operator =(const A &right) {
x=right.get_x();
y=right.get_y();
return *this;
}
// Присваивание наследнику наследника.
B& B::operator = (const A &right) {
if (this!=&right) {
delete prev;
prev=0;
x=right.x;
y=right.y;
}
return *this;
}
// Операция сложения родителя и наследника.
B operator + (B left, A right) {
B res;
res.x = left.c + right.get_x();
res.y = left.d + right.get_y();
res.prev = &left; // Думал, что так решается, но не уверен.
return res;
}
это не С, а С++
DenisM300
Специально поставил Dev-C++.
Ваш код всё ещё не компилируется.
Продолжаете настаивать на своей версии?
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
Предыдущая тема: не знаю как назвать тему :-)