Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 8
1

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

27.07.2012, 11:29. Просмотров 1340. Ответов 5
Метки нет (Все метки)

Помогите, пожалуйста, с 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, чтобы не было ошибки и результат соответвовал ожидаемому (исходя из здравого смысла).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.07.2012, 11:29
Ответы с готовыми решениями:

Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов)
Тема: Множественное наследование. Явная реализация методов базовых абстрактных классов. Как...

Реализация отношения классов типа двунаправленная ассоциация, UML, порядок объявления классов, неполный класс
Доброго времени суток! Осваивая UML, решил реализовать отношение двунаправленной ассоциации по...

Реализация классов-наследников или классов-родителей
Не могу переделать функционал программы таким образом, чтобы у появились классы-наследники, или...

Реализация классов чисел
есть задача по реализации 2 классов действительно и комплексного числа, при дебаги возникают...

5
1311 / 973 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
27.07.2012, 11:41 2
Исходя из здравого смысла было бы неплохо написать условие задач и при написании сообщения форматировать его.
0
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
27.07.2012, 11:47 3
Цитата Сообщение от Beluga Посмотреть сообщение
Что нужно изменить в коде задания, чтобы деструктор вызвался?
сделать деструктор виртуальным

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

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

Добавлено через 45 секунд
Цитата Сообщение от nexen Посмотреть сообщение
*"правило большой тройки"*
ну вот сам все и нашел)
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2012, 12:52

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Реализация собственных классов
Разработать прогнрамму, демонстрирующую работу с объектами 2х типов: Triangle(треугольник) и...

Реализация классов integer, double
Есть задания реализовать класс integer,double,char производные от абстрактного класса Number....

Реализация программы с помощью классов
Здравствуйте, коллеги-программеры! Обращаюсь к Вам с таким вопросом. У меня есть написанная мной...

Реализация классов вектор и строка
Для лабораторной работы нужно было написать свою реализацию классов вектор и строка. Выкладываю...

ООП реализация сложных классов
Вот задание как реализуется сложный класс“база-сектор” (дуга+радиус+радиус) , в которых...

Реализация списка + Шаблоны классов
Всем добрый день, есть не большая проблема с реализацией списка с помощью шаблонов класса. Далеко...


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

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

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