Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[C++] А попробуй так 31.07.02 21:43 Число просмотров: 1466
Автор: + <Mikhail> Статус: Elderman
|
Ege, Voobcheto on eto i pisal iznachalno, tolko
operator = ni kogda ne budet vyzyvatsia, potomuchto proishodit initialization of class A t.k etot class ne imeet ctor i est` 2 public members kotorye i inicializiruutsia v dannom sluchae.
> > Есть класс (структура) скажем > > > > class Ca
> > {
> > public:
> > int i1;
> > int i2;
> > protected:
> > int i3; // = i1+i2
> > };
> > ---
> > Хочется писать > > > > Ca a = {1, 2};
> > ---
> > И чтоб при этом автоматически посчиталось i3. > > Возможно ли в с++ конструктор какой-то объявить для > этих > > целей или оператор? > > Попробуй так, может заработает (сам проверить не могу, > что-то со средой не в порядке). > > Идея в том чтобы перегрузить оператор = для массива из двух > константных интов: > > class A > { > public: > int i1; > int i2; > int i3; // i1 + i2 > void print() { printf("\n%d %d %d\n", i1, i2, i3); }; > operator = (const int[2] x) { i1=x[0]; i2=x[1]; i3=i1+i2; > }; > }; > > void main() > { > A a = {1,2}; > a.print(); > } > > По сути что происходит? > Ты объявляешь переменную а типа А и инициализируешь ее. > Тоже самое что int a = 10; только тип данных другой. > Если бы справа стоял операнд типа класса А, то ты бы смог > выполнить присвоение без проблем. Поэтому тебе нужно > определить оператор = для объекта другого типа, а именно > массив из двух константных интов. > > Попробуй может заработает, если нет попробуй какие-нибудь > вариации на эту же тему... > > Хотя если быть более точным, то в твоем случае ты создаешь > новую переменную А а и сразу же инициализируешь ее. Поэтому > лучше тебе создать конструктор для массива из двух > константных интов.
|
|
|