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

Ромбовидное наследование. Деструкторы. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Подсчитать количество цифр в заданном натуральном числе. http://www.cyberforum.ru/cpp-beginners/thread544368.html
Подсчитать количество цифр в заданном натуральном числе. (как можно понятнее и проще, если можно)
C++ Тема: Объединения Здравствуйте всем))) Тут задачка лично для меня не очень то и понятнааая)) может кто то помочь?? Условие: Написать программу хранения координаты точки в виде объединений внутри структуры для целочисленного и вещественного типов данных (по обьяснению учителя координаты брать как очки обычные например А(х,у)) Заранее спасибоо))) http://www.cyberforum.ru/cpp-beginners/thread544365.html
C++ Программирование задач обработки структур и файлов
Задание: Даны сведения о результатах сессии: ФИО студента, названия четырех предметов и оценки, полученные по каждому предмету. Вывести фамилии студентов, общий балл которых отличается не более чем на 2 балла от максимального общего балла. Заранее огромное спасибо!
Работа с каталогами C++
как в с++ организовать копирование и перемещение каталога на указанный диск? Спасибо.
C++ Алгоритмы. не пойму в чём ошибка... http://www.cyberforum.ru/cpp-beginners/thread544358.html
В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1) номер максимального по модулю элемента массива; 2) сумму элементов массива, расположенных после первого положительного элемента. Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых лежит в интервале , а потом — все остальные. 3) Построить класс для работы с очередью с...
C++ вычислить значения ряда! Требуется вычислить значение функции,заданной с помощью ряда Тейлора на интервале от Xn до Xk с шагом dx и точностью e !!проблема в том что при выводе результата программа выводит даже те результаты ,когда еще не была достигнута точность,как сделать так,чтобы выводились только те результаты ,где точность была достигнута!!! вот сам код #include <cstdlib> #include <iostream> #include <cmath>... подробнее

Показать сообщение отдельно
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 268
10.04.2012, 17:14     Ромбовидное наследование. Деструкторы.
глобальная цель - ромбовидное наследование. Сейчас цель - разобраться с вызовами конструкторов/деструкторов.
в смысловую нагрузку кода не вникайте - там смысла оч мало
важно - в конструкторе выделяется динамическая память - в деструкторе возвращается. Сейчас есть только 2 класса - базовый и 1 потомок.
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
 
class chipset
{
    short *USB_number;//[0] - usb2 / [1] - usb3
    
public:
    chipset(short usb2, short usb3)
    {
        USB_number = new short[2];
        USB_number[0] = usb2;
        USB_number[1] = usb3;
    }
    
    chipset(chipset &chip)
    {
        USB_number = new short[2];
        USB_number[0] = chip.USB_number[0];
        USB_number[1] = chip.USB_number[1];
    }
 
    chipset()
    {
        USB_number = new short[2];
        USB_number[0] = 4;
        USB_number[1] = 0;
    }
 
    void operator = (chipset &chip)
    {
        USB_number[0] = chip.USB_number[0];
        USB_number[1] = chip.USB_number[1];
    }
 
    void print()
    {
        cout<<"USB2 \t-\t"<<USB_number[0]<<" шт."<<endl;
        cout<<"USB3 \t-\t"<<USB_number[1]<<" шт."<<endl;
    }
 
    ~chipset()
    {
        delete [] USB_number;
    }
};
 
class chipsetP : virtual public chipset
{
    short* Multi;
    bool SLI_CF_enable;
 
protected:
 
    void _print()
    {
        cout<<"ядро1 Множитель \t-\tx"<<Multi[0]<<endl;
        cout<<"ядро2 Множитель \t-\tx"<<Multi[1]<<endl;
        if (SLI_CF_enable)
            cout<<"SLI/CrossFire \t-\t включён"<<endl;
        else
            cout<<"SLI/CrossFire \t-\t выключен"<<endl;
    }
 
public:
    chipsetP(short usb2, short usb3, short core1, short core2, bool SC):chipset(usb2, usb3)
    {
        Multi = new short[2];
        Multi[0] = core1;
        Multi[1] = core2;
        SLI_CF_enable = SC;
    }
 
    chipsetP(chipsetP & cp):chipset(cp) //вопрос
    {
        Multi = new short[2];
        Multi[0] = cp.Multi[0];
        Multi[1] = cp.Multi[1];
        SLI_CF_enable = cp.SLI_CF_enable;
    }
 
    chipsetP():chipset()
    {
        Multi = new short[2];
        Multi[0] = 30;
        Multi[1] = 30;
    }
 
    void print()
    {
        chipset::print();
        _print();
    }
 
    ~chipsetP()
    {
        delete [] Multi;
        chipset::~chipset();
    }
};
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0,"Rus");
    chipsetP* P55 = new chipsetP;
    //chipsetP P55(4, 0, 32, 30, true);
    P55->print();
 
    delete P55;
    return 0;
}
Принт происходит правильно. Объект создаётся. Ошибка в деструкторе на этапе выполнения
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru