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

Реализация классов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Beluga
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 8
27.07.2012, 11:29     Реализация классов #1
Помогите, пожалуйста, с 2-мя заданиями!
1)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 class A
{
public:
    A();
    ~A();
 
private:
    D m_data;
};
//////////////////////////////////////////////////////////////////
class B: public class A
{
public:
    B();
    ~B();
 
private:
    D m_data2;
};
//////////////////////////////////////////////////////////////////
инициализируем объект класса А следующим образом:

C++
1
2
3
4
5
6
int main()
{
    A* a = new B();
    delete a;
    return 0;
};
Что нужно изменить в коде задания, чтобы деструктор вызвался?

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
class cString
{
public:
    cString(const char* data)
    {
        m_data = new char[strlen(data) + 1];
        strcpy(m_data, data);
    };
 
    ~cString()
    {
        delete m_data;
    }
 
    inline char* GetCString()
    {
        return m_data
    };
 
private: 
    char* m_data;
}
//////////////////////////////////////////////////////////////////
void Out(cString string)
{
    cout<<string.GetCString())<<endl;
};
//////////////////////////////////////////////////////////////////
Что выведется на экран в следующей реализации? Будут ли какие-то ошибки?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//////////////////////////////////////////////////////////////////
int main()
{
    cString s1(“string 1);
    cString s2(“string 2);
    cString s3 = s1;
 
    Out(s1);
    Out(s2);
    Out(s3);
 
    return 0;
}
На экран будут выведены строки:
string 1
string 2
а далее возникнет ошибка

Что нужно изменить в коде задания 3, чтобы не было ошибки и результат соответвовал ожидаемому (исходя из здравого смысла).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
27.07.2012, 11:41     Реализация классов #2
Исходя из здравого смысла было бы неплохо написать условие задач и при написании сообщения форматировать его.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.07.2012, 11:47     Реализация классов #3
Цитата Сообщение от Beluga Посмотреть сообщение
Что нужно изменить в коде задания, чтобы деструктор вызвался?
сделать деструктор виртуальным

Добавлено через 1 минуту
Цитата Сообщение от Beluga Посмотреть сообщение
Что нужно изменить в коде задания 3, чтобы не было ошибки и результат соответвовал ожидаемому (исходя из здравого смысла).
переопределить конструктор копирования и оператор присваивания
Beluga
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 8
27.07.2012, 12:35  [ТС]     Реализация классов #4
Цитата Сообщение от David Sylva Посмотреть сообщение
Исходя из здравого смысла было бы неплохо написать условие задач и при написании сообщения форматировать его.
)) Понимаю. Но пишу ровно так, как описаны сами задачи
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
27.07.2012, 12:47     Реализация классов #5
Jupiter, а так ли нужно изменять оператор присваивания? Разве это :
C++
1
2
MY_STRING a("okey");
MY_STRING b = a;
вызывает хотя бы раз оператор? Разве здесь не конструктор от с-строки и конструктор копирования?

Добавлено через 10 минут
*если, конечно, не учитывать "правило большой тройки"*
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.07.2012, 12:52     Реализация классов #6
nexen, в данном коде оператор присваивания не вызывается, но есть и правила хорошего тона, а именно: если в классе явно определен деструктор то следует явно определить конструктор копирования и оператор присваивания. При чем это правило взаимно-однозначно т.е. если в классе явно опреден оператор присваивания то следует явно определить деструктор и конструктор копирования, и т.д. С выходом нового стандарта это правило ещё и расширяется для rvalue.

Добавлено через 45 секунд
Цитата Сообщение от nexen Посмотреть сообщение
*"правило большой тройки"*
ну вот сам все и нашел)
Yandex
Объявления
27.07.2012, 12:52     Реализация классов
Ответ Создать тему
Опции темы

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