Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Katran1990
1 / 1 / 0
Регистрация: 10.11.2013
Сообщений: 15
#1

Перегрузка операторов С++ - C++

10.11.2013, 02:51. Просмотров 320. Ответов 2
Метки нет (Все метки)

Всем привет!
Помогите пожалуйста разобраться в коде. Я сооооовсем начинающий и сейчас учу с++ по Шилдту и Либерти. Вопрос связан с простейшей программой перегрузки операторов. Программа следующая:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "stdafx.h"
#include "iostream"
using namespace std;
 
class SimpleCircle
{
public:
    SimpleCircle();
    SimpleCircle(int);
    SimpleCircle(const SimpleCircle &);
    ~SimpleCircle();
 
    int GetRadius()const;
    void SetRadius(int);
 
    const SimpleCircle & operator++();
    const SimpleCircle operator++(int);
    SimpleCircle & operator=(const SimpleCircle &);
 
private:
    int *itsRadius;
};
 
SimpleCircle::SimpleCircle()
{itsRadius=new int(1);}
 
SimpleCircle::SimpleCircle(int radius)
{itsRadius=new int(radius);}
 
SimpleCircle::SimpleCircle(const SimpleCircle & crcl)
{int val=crcl.GetRadius();
itsRadius=new int(val);}
 
SimpleCircle::~SimpleCircle()
{delete itsRadius;}
 
int SimpleCircle::GetRadius() const
{return *itsRadius;}
 
const SimpleCircle & SimpleCircle::operator++()
{++(*itsRadius);
return *this;}
 
const SimpleCircle SimpleCircle::operator ++(int)
{SimpleCircle temp(*this);
++(*itsRadius);
return temp;}
 
SimpleCircle & SimpleCircle::operator =(const SimpleCircle & crcl)
{if(this==&crcl)
return *this;
*itsRadius=crcl.GetRadius();
return*this;}
 
int _tmain(int argc, _TCHAR* argv[])
{
    SimpleCircle CircleOne, CircleTwo(9);
    cout<<"CircleOne: "<<CircleOne.GetRadius()<<endl;
    cout<<"CircleTwo: "<<CircleTwo.GetRadius()<<endl;
    ++CircleOne;
    CircleTwo++;
    cout<<"CircleOne: "<<CircleOne.GetRadius()<<endl;
    cout<<"CircleTwo: "<<CircleTwo.GetRadius()<<endl;
    CircleOne=CircleTwo;
    cout<<"CircleOne: "<<CircleOne.GetRadius()<<endl;
    cout<<"CircleTwo: "<<CircleTwo.GetRadius()<<endl;
    
return 0;
}
Результат выполнения:
Код
CircleOne: 1
CircleTwo: 9
CircleOne: 2
CircleTwo: 10
CircleOne: 10
CircleTwo: 10
То есть все работает правильно.
В данной программе не могу понять для какой цели служит этот конструктор:
C++
1
2
3
SimpleCircle::SimpleCircle(const SimpleCircle & crcl)
{int val=crcl.GetRadius();
itsRadius=new int(val);}
Как я понимаю он нужен для работы оператора присваивания, но не понимаю для чего? Вижу что принимает, что делает, но ума не приложу как он тут клеится к остальному коду.
Если не сложно объясните пожалуйста. Третий день бьюсь. Без понимания решения этой задачи не смогу учить дальше.
Заранее всем огромное спасибо!)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2013, 02:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка операторов С++ (C++):

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this - C++
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

Перегрузка операторов << и >> - C++
Добрый вечер! Задание состоит в следующем: необходимо изменить интерфейс методов Print и Read: std::ostream &amp;Print(std::ostream &amp; =...

Перегрузка операторов - C++
Исправьте ошибку, неуказанный тип возвращаемого значения, какая я то глупая ошибка, но я не могу понять На этой строке point1=point2+5;...

перегрузка операторов - C++
Имеется такая программа: class reversion { vector&lt;int&gt; mass1; vector&lt;int&gt; mass2; vector&lt;int&gt; rev1; vector&lt;int&gt; rev2; ...

Перегрузка операторов - C++
Никак не возьму в толк, почему оно не работает! // CG5.cpp : Defines the entry point for the console application. // #include...

Перегрузка операторов - C++
Доброго времени суток. на завтра надо сделать работу, а я не могу понять как использовать перегрузку операторов. помогите пожалуйста...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
10.11.2013, 03:33 #2
Цитата Сообщение от Katran1990 Посмотреть сообщение
В данной программе не могу понять для какой цели служит этот конструктор:
Это конструктор копий. Допустим, есть класс представляющий массив целых чисел
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Array_of_int
{
private:
  int* data_;
  int size_;
  //...
 
public:
  explicit Array_of_int(int n)
  {
    data_ = new int [n];
    size_ = n;
    //...
  }
 
  ~Array_of_int()
  {
    delete[] data_;
  }
 
  const int* data() const
  {
    return data_;
  }
};
Если выполнить данный код
C++
1
2
3
4
5
6
7
8
#include <cassert>
//...
int main()
{
  Array_of_int a1(10);
  Array_of_int a2(a1);
  assert(a1.data() != a2.data());
}
то объект a2 ,будет представлять собой точную копию объекта a1, т.е. значения всех полей класса a1 будут скопированы в a2 включая значения указателей. Если всё оставить так, как есть, то a1 и a2 будут использовать один и тот же внутренний массив. Для того чтобы избежать подобных вещей и пишется конструктор копий, в данном случае он мог бы выглядеть так
C++
1
2
3
4
5
6
Array_of_int(const Array_of_int& rhs)
{
  data_ = new int [rhs.size_];
  std::copy_n(rhs.data_, rhs.size_, data_);
  size_ = rhs.size_;
}
1
Katran1990
1 / 1 / 0
Регистрация: 10.11.2013
Сообщений: 15
10.11.2013, 19:32  [ТС] #3
Огромное спасибо. Теперь понятно для чего он здесь. Еще раз спасибо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2013, 19:32
Привет! Вот еще темы с ответами:

Перегрузка операторов - C++
Хочу написать функцию вывода стека на экран. Стек построен на основе динамического массива который написал я. И вот интересно, при написаны...

Перегрузка операторов - C++
Здравствуйте все. Начали проходить ООП, но хотелось бы узнать больше, подскажите пожалуйста кто знает хорошие книги с грамотным описанием...

Перегрузка операторов - C++
Доброго всем времени суток!Пожалуйста помогите мне неучу разобраться.Пытаюсь разобраться с классами,но пока безуспешно без посторонней...

Перегрузка операторов >>, <<, [] - C++
задача: написать перегруженные операторы &lt;&lt;, &gt;&gt; и для объекта массив деков символов. Объект дек реализован. проблема с квадратными...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru