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

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

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

Объявление объекта одного класса в описании другого класса - C++

02.04.2012, 10:07. Просмотров 1042. Ответов 5
Метки нет (Все метки)

Здравствуйте.
Почему при объявлении Student s в классе Teacher не возникает ошибки? Ведь такой объект уже существует.
И почему при дальнейшем вызове члена s.x из функции main() он выдаёт ранее присвоенное значение, хотя должен был обнулиться посредством конструктора?

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
#include<iostream.h>
 
class Student
{
    public:
    Student()
    {
        cout << "Конструируем Student\n";
        x = 0.0;
        cout << "вывожу s.x  x = " << x << " classStudent\n";
    }
    float x;
};
 
class Teacher
{
    public:
    Teacher()
    {
        cout << "Конструируем Teacher\n";
        y = 0;
    }
    Student s;
    int y;
};
 
int main()
{
    Student s;
    cout << "вывожу s.x  x = " << s.x << " main()\n";
    s.x = 3.2;
    cout << "вывожу s.x  x = " << s.x << " main()\n";
    cout << "объявляю объект t класса Teaher\n";
    Teacher t;
    cout << "вывожу s.x  x = " << s.x << " main()\n";
    cout << "Возвращаемся в main()\n";
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2012, 10:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объявление объекта одного класса в описании другого класса (C++):

Объявление объекта класса fstream в качестве статической компоненты другого класса - C++
Доброго времени суток. Есть задание, в котором говорится &quot;...Перепишите программы из упражнений 4 и 6 таким образом, чтобы использовать...

Объявление в классе объекта другого класса - C++
какая-то фигня получается, допустим есть 2 класса - class1 и class2, в хедерах class1.h подключён class2.h, а в class2.h подключён...

Передача данных объекта одного класса , объекту другого - C++
Доброго времени суток. В общем, столкнулся с проблемой передачи данных от одного класса другому. Есть класс NewApp, создаю объект с...

Создание объекта класса с полем являющимся объектом другого класса - C++
Bill a; cin&gt;&gt;a;//тут я ввел с помощью перегруженного оператора ElementSpiska c; //поля у Spiska(Bill A,int,string,int) ...

Ошибка компиляции (преобразование объекта класса в объект другого класса) - C++
Друзья, добрый день! Не могу понять почему выдается ошибка компиляции... Прога преобразует доллары США в старые Британские фунты. Но...

Как переместить из стека одного класса в массив другого класса? - C++
// HW_on.24.11_classStack_SantaClaus.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
eji
118 / 118 / 6
Регистрация: 17.09.2010
Сообщений: 288
02.04.2012, 11:16 #2
переулок, Вам нужно понять, что такое обьект и экземпляр класса. В данном примере классы "Студент" и "Учитель" это обьекты, а переменные типа "s" и "t" это их экземпляры. переменная "s", которая определена в классе "Учителя" никак не связана из переменной из функции мэин. Для того чтобы ссылаться на t.s s (из мэин) нужно преобразовать в указатель:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    setlocale(0, "");
    cout << "Program"
         << endl;
    cout << "объявляю объект t класса Teaher\n";
    Teacher t;
    Student *s;
    s = &t.s;
    cout << "вывожу s.x  x = " << s->x << " main()\n";
    s->x = 3.2;
    cout << "вывожу s.x используя указатель  x = " << s->x << " main()\n";
    cout << "вывожу s.x  x = " << t.s.x << " main()\n";
    cout << "Возвращаемся в main()\n";
    system("pause");
    return 0;
}
2
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
02.04.2012, 14:37 #3
Цитата Сообщение от eji Посмотреть сообщение
В данном примере классы "Студент" и "Учитель" это обьекты
Сами себе противоречите. Классы это классы. Объекты (экземпляры) это объекты (экземпляры).
2
переулок
0 / 0 / 0
Регистрация: 02.04.2012
Сообщений: 3
02.04.2012, 18:01  [ТС] #4
Eji, зачем там указатель - не понял. Из вашего кода видно, что он не обязателен. Вполне хватает полного имени - t.s.x. Но, в целом, спасибо. Если я правильно понял то у меня получились два разных икса. Student::x и Teacher::Student::x. По сути они являются членами разных объектов (как минимум! Кстати, к какому классу отнести T::S::x?).
А что надо, чтобы все "Студенты", объявленные и в main(), и в Teacher, по окончании оказались обьектами класса Student? Под каждый T::S создавать S и присваивать адрес? Или можно проще?
0
eji
118 / 118 / 6
Регистрация: 17.09.2010
Сообщений: 288
02.04.2012, 19:03 #5
переулок,
А что надо, чтобы все "Студенты", объявленные и в main(), и в Teacher, по окончании оказались обьектами класса Student? Под каждый T::S создавать S и присваивать адрес? Или можно проще?
Что вообще программа должна делать, я не понял, что Вы хотите?
0
переулок
0 / 0 / 0
Регистрация: 02.04.2012
Сообщений: 3
05.04.2012, 08:15  [ТС] #6
Цитата Сообщение от eji Посмотреть сообщение
переулок,

Что вообще программа должна делать, я не понял, что Вы хотите?
Вы пояснили мою ошибку с первого поста. Спасибо. Дальше я просто стал загоняться, не особо понимая о чём говорю. Программы нет. Извините.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2012, 08:15
Привет! Вот еще темы с ответами:

Сам вопрос: почему функция-член одного класса не вызывается из функции-члена другого класса? - C++
//Щас всё объясню. Так, имеем два класса, в одном я определил функцию-член. Все конструкторы и прочее //опущены для уменьшения кода ...

Использование объекта одного класса при создании нового класса - C++
Добрый вечер. У меня такая проблема. Есть готовый класс L2 - список, на его основе нужно создать дек. Я поступил так: в приватной части...

Объявление объекта класса - C++
Доброе время суток! Дело вот в чем: В конструкторе c параметрами класса Piramida, мне нужно создать объект класса M_Ygolnik с...

Объявление объекта вложенного класса - C++
Есть структура наподобие: template&lt;class T&gt; class A{ //...... public: class B { int dd; int mm; int yy; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.04.2012, 08:15
Ответ Создать тему
Опции темы

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