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

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

Войти
Регистрация
Восстановить пароль
 
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
#1

Масив объектов - C++

07.10.2009, 22:52. Просмотров 1000. Ответов 14

Вот читаю тему массив объектов. набрал небольшой код, но программ не идёт.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
class MyClass {
    int x;
public:
    void set_x(int i) { x = i ; }
    int get_x() { return x; }
};
 
int main()
{
    MyClass obs[4];
    int i;
    for(i = 0; i < 4; i++)
    obs.set_x(i);
    for(i = 0; i < 4; i++)
    cout<<"obs["<<i<<"].get_x(): ";
    <<obs[i].get_x() << '\n';
    cin.get();
}
cpp(16) : error C2228: left of '.set_x' must have class/struct/union
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2009, 22:52     Масив объектов
Посмотрите здесь:

Масив D[m][n] C++
масив-рядок C++
C++ Масив
C++ Масив строк на С
масив C++
C++ Масив
C++ Масив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
1346 / 879 / 51
Регистрация: 02.01.2009
Сообщений: 2,643
Записей в блоге: 1
07.10.2009, 22:59     Масив объектов #2
Код
 obs[COLOR="Red"][i][/COLOR].set_x(i);
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
07.10.2009, 23:24  [ТС]     Масив объектов #3
Не прокоментируете вот это
C++
1
2
for(i = 0; i < 4; i++)
        obs.set_x(i);
M128K145
Эксперт C++
8280 / 3499 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
07.10.2009, 23:31     Масив объектов #4
Хотел сказать это?
C++
1
2
for(i = 0; i < 4; i++)
        obs[i].set_x(i);
полю x i-ого элемента массива obs типа MyClass присваивается значение i
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
07.10.2009, 23:36     Масив объектов #5
Syltan, не
Цитата Сообщение от Syltan Посмотреть сообщение
for(i = 0; i < 4; i++)
obs.set_x(i);
а как уже сказал ISergey

C++
1
2
for(i = 0; i < 4; i++)
        obs[i].set_x(i);
у нас создан массив из четырех объектов. Вот мы каждому из объектов присваеваем свойству x некое значение. В данном случае:

у первого объекта свойство x = 0
у второго x = 1
у третьего x = 2
у четвертого x = 3
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
08.10.2009, 00:04  [ТС]     Масив объектов #6
Код
присваеваем свойству x некое значение
Мы присваиваем свойству х , описанному в привате?
А затем выводим 4 раза этот х, описанный в привате:
C++
1
obs[i].get_x()
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
08.10.2009, 00:04     Масив объектов #7
Syltan, да, но черезе public метод set_x()
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
08.10.2009, 00:11  [ТС]     Масив объектов #8
Ещё вопрос, как этот x получает значение, ведь,если например:
C++
1
2
3
int a[50];
for(int i=0; i< 4; i++)
a[i] =i
А как же тут присваивается?

C++
1
2
for(i = 0; i < 4; i++)
        obs[i].set_x(i);
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
08.10.2009, 00:20     Масив объектов #9
в метод set_x() передается значение.

C++
1
void set_x(int i) { x = i ; }
как видно, метод сам присваевает свойству x передавемое в аргументе значение i.
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
08.10.2009, 00:25  [ТС]     Масив объектов #10
Спасибо,скажите,а какую роль играет то,что этот х, расположен в привате, а не в паблике.
C++
1
2
private:
int x;
Ещё:
C++
1
void set_x(int i) { x = i ; }
Почему мы можем пользоваться в теле функции set_x переменной х, описанной в привате.
На сегодня это последние вопросы.
M128K145
Эксперт C++
8280 / 3499 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
08.10.2009, 00:25     Масив объектов #11
private разрешает доступ к переменным/методам/etc. в пределах своего класса, поэтому можем использовать. А скрываем для того, что бы допустим по невнимательности ты не изменил значение этого поля
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
08.10.2009, 00:38     Масив объектов #12
Syltan, почитайте о концепции ООП. В книге Лафоре "Объектно-ориентированное программирвоание в С++" это очень подробно расписано.
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
08.10.2009, 00:53  [ТС]     Масив объектов #13
А почему этот код, будет считаться неправильным:
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
#include <iostream>
using namespace std;
 
class MyClass {
    
public:
    int set_x(int i) {r = i }
    
};
int MyClass::get_x(int r)
{
    return r;
}
 
int main()
{
    MyClass obs[4];
    int i;
    for(i = 0; i < 4; i++)
        obs[i].set_x(i);
    for(i = 0; i < 4; i++)
    cout<<"obs[" <<i<<  "].get_x(): "
    <<obs[i].get_x() << '\n';
    cin.get();
}
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
08.10.2009, 01:02     Масив объектов #14
Цитата Сообщение от Syltan Посмотреть сообщение
А почему этот код, будет считаться неправильным:
Потому что гладиолус.
У тебя в самом класе не объявлен метод get_x().
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2009, 02:20     Масив объектов
Еще ссылки по теме:

масив C++
C++ масив
C++ Динамический масив
C++ Масив
C++ масив данных

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

Или воспользуйтесь поиском по форуму:
ISergey
Maniac
Эксперт С++
1346 / 879 / 51
Регистрация: 02.01.2009
Сообщений: 2,643
Записей в блоге: 1
08.10.2009, 02:20     Масив объектов #15
Код
int set_x(int i) {[COLOR="Red"]r[/COLOR] = i }
r - тоже не существует..
Yandex
Объявления
08.10.2009, 02:20     Масив объектов
Ответ Создать тему
Опции темы

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