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

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

Войти
Регистрация
Восстановить пароль
 
Пушкин
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 8
#1

Разные экземпляры класса ? - C++

27.10.2010, 17:01. Просмотров 545. Ответов 2
Метки нет (Все метки)

Есть класс Visitor и в нем объявленна функция

C++
1
2
3
4
5
6
7
8
9
10
11
void visitor:: enterToPark(jurassicPark jp){
    //Trying to enter to park at every random 10 seconds if he isn't in park
    if (isInsidePark != true) {
        //cout << randomTime << endl;
        if ((int)t.elapsedTime() == randomTime) {
            jp.addNewVisitor();
            isInsidePark = true;
            cout << jp.showNumInPark();         
        }
    }
}
ну и в функции мэйн

C++
1
2
3
4
5
6
7
8
9
void main() {
    mytimer t;
    jurassicPark jp;
    visitor v;  
    while(1) {
        v.enterToPark(jp);
        cout << jp.showNumInPark();
    }
}
Я так понял, что функция enterToPark класса Visitor принимая параметр jurassicPark, создает новый экземпляр jurassicPark, а не изменяет уже заданный в мэйне ?

по сути переменная jp из мэйна после выполнения действия должна увеличить счетчик с нуля до еденицы, а он так и остается на нуле. Зато когда я вызываю jp.showNumInPark() из функции enterToPark(...), здесь все работает как положенно. Подскажие как это исправить ? Чтобы функция v.enterToPark(...) работала с уже существующим экземпляром, а не создавала новый ? Вроде как это решается поинтерами, но я не уверен, да и не дошел до них.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2010, 17:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разные экземпляры класса ? (C++):

Статический и динамический экземпляры класса - C++
В чем разница между статическим и динамическим экземплярами класса? Мои познания здесь скромны: 1) Разная инициализация. У меня есть...

Как перебрать все экземпляры класса? - C++
Здравствуйте! Я начинающий программист..... может и не программист вовсе. Но мне необходимо сделать такую задачу. С классами начала...

Вывод контейнера указателей на экземпляры абстрактного класса - C++
Добрый день. Задача требует описать абстрактный класс и несколько наследников этого класса. Затем, описать контейнер (list)...

Как лучше сделать хранение ссылок на экземпляры класса? - C++
есть необходимость зранить все созданные экземпляры класса придумал сдделать это с помощью статического списка - ничего не вышло - ошибка...

Swap для элементов контейнера указателей на экземпляры абстрактного класса - C++
Добрый вечер. Не могу осилить проблему: Описан абстрактный класс. Описаны наследники этого класса уже без абстрактности. Описан...

Сравнение двух строк (экземпляры класса string ) задействуя метод compare - C++
Здравствуйте, мне необходимо сравнить два экземпляра класса string, один из экземпляров вводится с клавиатуры, второй экземпляр берется из...

2
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
27.10.2010, 17:19 #2
Цитата Сообщение от Пушкин Посмотреть сообщение
Я так понял, что функция enterToPark класса Visitor принимая параметр jurassicPark, создает новый экземпляр jurassicPark, а не изменяет уже заданный в мэйне ?
Ты правильно понял, при передаче функции enterToPark параметра типа jurassicPark создается локальная копия объекта jp, которая уничтожается после выполнения функции. Переданный объект функция не изменяет. Чтобы функция могла модифицировать переданный ей объект, нужно, чтобы объект передавался не по значению, а по ссылке. Для этого измени прототип функции на такой:
C++
1
void visitor:: enterToPark(jurassicPark& jp)
Можно и с помощью указателей:
C++
1
2
3
4
5
6
7
8
9
10
11
void visitor:: enterToPark(jurassicPark* jp){
        //Trying to enter to park at every random 10 seconds if he isn't in park
        if (isInsidePark != true) {
                //cout << randomTime << endl;
                if ((int)t.elapsedTime() == randomTime) {
                        jp->addNewVisitor();
                        isInsidePark = true;
                        cout << jp->showNumInPark();                     
                }
        }
}
Цитата Сообщение от Пушкин Посмотреть сообщение
Вроде как это решается поинтерами, но я не уверен, да и не дошел до них.
Странно, обычно указатели изучаются раньше классов...
1
Пушкин
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 8
27.10.2010, 17:24  [ТС] #3
Я до этого год яву изучал, а там с этим попроще, щас попробую переписать

Добавлено через 2 минуты
Работает, огромное спасибо )
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2010, 17:24
Привет! Вот еще темы с ответами:

Почему все экземпляры класса в векторе имеют абсолютно одни и те же характеристики? - C++
Доброе время суток! Суть: Есть класс, в конструкторе которого некоторые переменные класса задаются рандомно. enum Sex {male,...

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

Как переопределить функцию так, чтобы она не только могла принимать разные параметры, но и возвращать тоже разные? - C++
То есть я считаю несправедливым, если такое проканывает: void f () {;} void f (int) {;} а такое нет: void f (int) {;} int f...

Отсутствуют экземпляры конструктора - C++
Добрый день, по условию &quot;b) Создать иерархии наследования: автомобиль - легковой автомобиль, грузовой автомобиль – внедорожник.&quot; я написал...


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

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

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