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

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

Войти
Регистрация
Восстановить пароль
 
obuhanoe
23 / 21 / 2
Регистрация: 25.08.2010
Сообщений: 93
#1

Класс в классе - C++

15.09.2010, 10:42. Просмотров 820. Ответов 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
26
27
class Date
{
  public:
          
 
           Date(int dd = 0, Month mm = Month(0), int year = 0);
           //Деструктор
           ~Date(){};
          
 
           //Класс исключений
           class Bad_date
           {
            public:
                    Bad_date(short);
                    string& viewing_ex();
            private:
                    string error;
           };
 
         
 
  private:
           int day, year;
           Month month;
           static Date default_date; // дата по умолчанию
};
нужен ли деструктор для class Bad_date или всю работу выполнит ~Date(){};
спасибо за ответы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2010, 10:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс в классе (C++):

У меня класс B в классе A, а в классе B рекурсивная функция переопределения оператора "()", как её вызвать, не создавая явно объект класса B? - C++
#include <windows.h> #include <iostream> using namespace std; //Вот главный класс class A{ public: A (){}; class...

Ошибка в выводе данных, класс выводит правильно, а класс в классе - нет - C++
Неизвестная для меня проблема. Класс выводит данные правильно из Consigment, а вот третий экземпляр класса, работает не верно, если...

Абстрактный класс, наследование, класс хранится в другом классе - C++
Нужна помощь. Написать программу: 1 класс. Имеется абстрактный класс который описывает какую-то сущность, например Человек. В абстрактном...

Указатели в базовом классе на базовый класс и производный класс - C++
Пишу контейнер "Бинарное дерево поиска" для частотного словаря. С самим контейнером особо вопросов нету. Вопрос по поводу элементов в...

Класс в классе - C++
Не могу доделать код(Надо написать класс группы студентов(студентов реализовать в классе).Уже понаписывал много,а толку 0. В первый раз...

Класс в классе - C++
Здравстуйте. При создании базы данных столкнулся со следующей проблемой - не знаю как определить класс внутри класса. А именно скажите в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Oleg_SK
5 / 5 / 2
Регистрация: 15.09.2010
Сообщений: 25
15.09.2010, 10:55 #2
AFAIK, у Bad_date должен быть свой деструктор.
Chevit
3 / 3 / 0
Регистрация: 06.07.2010
Сообщений: 18
15.09.2010, 11:49 #3
Если не прописать явно деструктор Bad_date - сработает деструктор по умолчанию. Все зависит от того, что ты хочешь сделать.
Более того, если у тебя нет в классе динамических элементов - деструктор по умолчанию вполне приемлем...
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.09.2010, 11:54 #4
Цитата Сообщение от obuhanoe Посмотреть сообщение
нужен ли деструктор для class Bad_date или всю работу выполнит ~Date(){};
Для чего Вам деструктор в классе Bad_date, если он содержит только std::string?
Для Date деструктор также не нужен, ибо ему нечего делать.
Цитата Сообщение от Chevit Посмотреть сообщение
деструктор по умолчанию
Насколько я помню, автоматически генерятся только:
1. Конструктор по умолчанию.
2. Конструктор копирования.
3. Оператор присваивания.
Chevit
3 / 3 / 0
Регистрация: 06.07.2010
Сообщений: 18
15.09.2010, 12:22 #5
CyBOSSeR,
Если деструктор не задан в программе, то он будет автоматически сгенерирован компилятором для уничтожения соответствующих объектов. Все деструкторы, сгенерированные компилятором, имеют атрибут public;
Это не относится к С++?

В случае если деструктор не определен явно, при удалении объекта класса просто ничего не происходит?
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.09.2010, 13:21 #6
Цитата Сообщение от Chevit Посмотреть сообщение
Это не относится к С++?
Да, относится, память таки подвела.
Деструктор будет просто объявлен и ничего делать не будет, а посему можно считать, что он и не генерится вовсе.
Цитата Сообщение от Chevit Посмотреть сообщение
В случае если деструктор не определен явно, при удалении объекта класса просто ничего не происходит?
При удалении объекта вызываются деструкторы его полей.
Nick Alte
Эксперт С++
1636 / 1008 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
15.09.2010, 15:06 #7
Деструктор, созданный компилятором по умолчанию, вызывает деструкторы для каждого члена класса. Деструкторы фундаментальных типов ничего не делают, а вот про std::string такого не скажешь. Тем не менее, деструктор для std::string будет вызван при уничтожении Bad_date автоматически.
obuhanoe
23 / 21 / 2
Регистрация: 25.08.2010
Сообщений: 93
15.09.2010, 16:52  [ТС] #8
По деструктору стало все понятно, возник еще вопрос
необходимо перегрузить ==
почему когда я пишу
C++
1
2
//Перегрузка == для сравнения двух дат
           bool operator== (Date&, Date&);
говорит что передавать необходимо 1 параметр, а как тогда сравнить значения?
fasked
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
15.09.2010, 17:05 #9
Цитата Сообщение от obuhanoe Посмотреть сообщение
говорит что передавать необходимо 1 параметр, а как тогда сравнить значения?
Вторым операндом является "текущий" объект. То есть объекта сравнивает себя с входным аргументом оператора ==.

Вот так может быть понятнее:
C++
1
2
3
bool operator== (const Date &w) const {
   return (this->day == w.day && this->month == w.month && this->year == w.year)
};
Кстати такой метод должен быть константным, как и аргумент метода
obuhanoe
23 / 21 / 2
Регистрация: 25.08.2010
Сообщений: 93
15.09.2010, 17:12  [ТС] #10
fasked - спасибо , понял
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
15.09.2010, 18:36 #11
Цитата Сообщение от Nick Alte Посмотреть сообщение
Деструкторы фундаментальных типов ничего не делают
Может все-таки память освобождают?
Chevit
3 / 3 / 0
Регистрация: 06.07.2010
Сообщений: 18
15.09.2010, 18:53 #12
Существенно это только в том случае, если фундаментальные типы созданы в "куче"...
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.09.2010, 21:43 #13
Цитата Сообщение от Mr.X Посмотреть сообщение
Может все-таки память освобождают?
При чем здесь память? Деструктор не участвует в высвобождении памяти из под объекта, для которого он был вызван. И маловероятно, что у встроенных типов есть деструкторы, по крайней мере в привычном понимании.
Nick Alte
Эксперт С++
1636 / 1008 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
16.09.2010, 11:27 #14
Это уже вопрос терминологии. В ряде случаев, особенно при работе с шаблонами, удобнее считать, что конструкторы и деструкторы есть у всех типов, но иногда они могут быть "пустыми" и ничего не делать.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template <typename T>
inline void Destroy(T& a)
{
    a.~T();
}
 
int main(int argc, char* argv[])
{
    int a;               // Для a вызывается конструктор int по умолчанию, который ничего не делает
    int b(1);           // Для b вызывается конструктор копирования
    a = int(2);        // Здесь a присваивается безымянное значение, созданное конструктором int
    Destroy(a);              // Так можно даже для аргумента типа int
//    a.~int();               // А вот так - нельзя
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2010, 11:27
Привет! Вот еще темы с ответами:

Класс в классе - C++
Пытаюсь учить C++, может кто подсказать как вложить классы Female или Male внутрь других классов и наследовать их от них? Вот сделал такой...

Не определяется класс Синглтона в другом классе - C++
Подскажите, пожалуйста, что нужно исправить. Компилятор выдает такие ошибки: 1. error c2027: использование неопределенного типа...

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

Указатель в классе, указывающий на этот же класс - C++
Разбирал чужой код и нашел примерно такую конструкцию: class Sample { public: Sample(); virtual ~Sample(); int Method();...


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

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

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