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

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

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

Инкремент. Где ошибка - C++

02.07.2010, 17:38. Просмотров 446. Ответов 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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
class SimpleCircle
{
public:
    //конструкторы
    SimpleCircle(); //стандартный
    SimpleCircle(int); //пользовательский
    SimpleCircle(const SimpleCircle &); //копий
    ~SimpleCircle(){}
    //методы доступа
    int GetRadius () const {return *itsRadius;}
    void SetRadius(int radius) {*itsRadius=radius;}
    //операторы
    const SimpleCircle & operator++(); //префикс
    const SimpleCircle operator++(int); //постфикс
private:
    //переменные
    int *itsRadius;
};
 
SimpleCircle::SimpleCircle()
{
    itsRadius=new int(5); //1 вариант синтаксиса
    //itsRadius=new int; //2 вариант синтаксиса
    //*itsRadius=5;
}
SimpleCircle::SimpleCircle(int radius)
{
    itsRadius=new int(radius); //1 вариант синтаксиса
    //itsRadius=new int; //2 вариант синтаксиса
    //*itsRadius=radius;
}
SimpleCircle::SimpleCircle(const SimpleCircle & rhs)
{
    int val=rhs.GetRadius();
    itsRadius=new int(val);
}
 
const SimpleCircle & SimpleCircle::operator ++() // реализация префикса
{
    ++(itsRadius);
    return *this; 
}
const SimpleCircle SimpleCircle::operator ++(int) //реализация постфикса
{
    SimpleCircle temp(*this);
    ++(itsRadius);
    return temp;
}
 
int main()
{
SimpleCircle CircleOne(7),CircleTwo;
cout<<"CircleOne Radius: "<<CircleOne.GetRadius()<<endl;
CircleOne=++CircleOne;
cout<<"CircleOne Radius after increment: "<<CircleOne.GetRadius()<<endl;
return 0;
}
результат после инкремента:
-33686019
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2010, 17:38
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Инкремент. Где ошибка (C++):

Вывести на экран количество слов где первая и последняя буквы одинаковы (не понимаю где ошибка) - C++
задан текст нужно вывести на экран количество слов где первая и последняя буквы одинаковы #include &lt;iostream&gt; #include &lt;conio.h&gt; ...

Подскажите, где может быть ошибка (структуры)? (скорее всего где-то амперсенд нужен, все вроде проверил) - C++
написать универсальный тип, который представляет точку на плоскости в координатах (х, у) и в полярных координатах. Написать функцию для...

Ошибка при компиляции. Где ошибка? (Работа с классом) - C++
Уважаемые форумчане! При компиляции проекта возникает ошибка &quot; undefined reference to `MeterNZiF::MeterNZiF()' &quot; на 7 строку приложения. ...

Укажите где ошибка (ошибка во время выполнения программы) - C++
Здравствуйте, помогите пожалуйста найти ошибки в коде которые возникаю при выполнении программы Картинка с ошибкой внизу поста. Код: ...

Инкремент ссылки - C++
int arr = {....} ; while(arr) // arr ссылка на начало массива то есть на 0 элемент ; { //тело цикла ++arr ;//инкремент } ...

Не работает инкремент - C++
repeat: if(e&lt;=mode){ cout &lt;&lt; &quot;\nИгрок №&quot; &lt;&lt; e &lt;&lt; a &lt;&lt; endl; cin &gt;&gt; sim &gt;&gt; b;//записываем в строку для...

2
Nick Alte
Эксперт С++
1646 / 1018 / 120
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
02.07.2010, 18:02 #2
Ты увеличиваешь значение указателя, переводя его на неизвестный природе "мусор", вместо того, чтобы увеличивать значение, на которое тот указывает. Правильно будет ++(*itsRadius);
Кроме того, деструктор сделан пустым, в то время, как он должен удалять выделенное значение. Ещё одна ошибка - оператор присваивания (сигнатура SimpleCircle& SimpleCircle::operator = (const SimpleCircle& src); ) оставлен на откуп компилятору, а с таким синтаксисом он будет просто копировать значение указателя, что неверно. Оператор надо определить для дублирования значения, либо запретить, объявив (определять не нужно) в секции private.
1
scar4ace
0 / 0 / 0
Регистрация: 24.06.2017
Сообщений: 2
02.07.2010, 18:14 #3
Цитата Сообщение от Nick Alte Посмотреть сообщение
Ты увеличиваешь значение указателя, переводя его ...
Спасибо, заработало!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2010, 18:14
Привет! Вот еще темы с ответами:

Инкремент в рекурсии - C++
Ребят, что-то не могу врубиться. Задача: используя рекурсию выводить введенный ранее текст в обратном порядке. Вот рабочая версия: ...

Инкремент структуры. - C++
Всем привет. Мне нужно инкремент структуры, чтобы прочитать её дальше. Вот код: typedef struct _STRC { DWORD N1; SWORD N2; }...

Инкремент переменной - C++
в задании сказано, что пользователь вводит строку и программа выводит ее, но если пользователь вводит еще и цифру, то программа должна...

Инкремент в произведении - C++
Друзья, на ерунде запнулся, допустим: n = 2000; тогда в какой последовательности нужно решать вот это выражение: --n*n*n = ? ...


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

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

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