Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 2
Регистрация: 02.01.2014
Сообщений: 240

Создать конструктор копирования класса

27.09.2014, 17:27. Показов 2868. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите создать конструктор копирования класса. Мне надо чтоб я в основной программе нажимал кнопку и она копировала введенные мной данные и сново, пока я не прикращу нажимать. Код основной программы я не кидаю, там фигня. А вот класс и первый мною написанный конструктор копирования кину.
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
//prog2.h
#include <cmath>
#include <stdio.h>
#pragma once
class Triangle
{
private:
    char *name[31];
    struct point {
        int x;
        int y;
    } *coordinates;
    double stores[3];
    double area = 0, p = 0;
public:
    void set()
    {
        printf("Name: \n");
        scanf("%s", &name);
        coordinates = new point[3];
        for (int i = 0; i < 3; i++)
        {
 
            do
            {
                printf("Enter the coordinates of the %d vertices  : \n", i + 1);
                if (scanf("%d", &coordinates[i].x) && scanf("%d", &coordinates[i].y))
                    break;
                else
                {
                    printf("Error!\n");
                    clearerr(stdin);
                    while (getchar() != '\n');
                }
            } while (true);
        }
        for (int i = 0; i < 3; i++) {
            stores[i] = sqrt(double(coordinates[i].x*coordinates[i].x + coordinates[i].y*coordinates[i].y));
            //printf("Длина стороны №%d = %lf\n", i + 1, stores[i]);
            p += stores[i];
        }
        area = sqrt((p / 2)*(p / 2 - stores[0])*(p / 2 - stores[1])*(p / 2 - stores[2]));
    }
    void show(){
        printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", 0xDA, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xBF);
        printf("%c Name:                           %c\n", 0xB3, 0xB3);
        printf("%c%-33s%c\n", 0xB3, &name, 0xB3);
        printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", 0xC3, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xB4);
        printf("%c Coordinates:                    %c\n", 0xB3, 0xB3);
        for (int i = 0; i < 3; i++)
        {
            printf("%c              x= %d; y= %d         %c\n", 0xB3, coordinates[i].x, coordinates[i].y, 0xB3);
        }
        printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", 0xC3, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xB4);
        printf("%c Length:                         %c\n", 0xB3, 0xB3);
        for (int i = 0; i < 3; i++) {
            printf("%c length of the side N%d = %lf%c\n", 0xB3, i + 1, stores[i], 0xB3);
        }
        printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", 0xC3, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xB4);
        printf("%c Area:                           %c\n", 0xB3, 0xB3);
        printf("%c    area of a triangle = %lf%c\n", 0xB3, area, 0xB3);
        printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", 0xC0, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xD9);
    }
};
class Copy{
public:
    Triangle *tr;
    Copy(){
        tr = new Triangle;
    }
    // Конструктор копирования.        
    Copy(const Triangle & area){
        this->tr = new Triangle;
        this->tr->area = area.tr->&area; Вот тут уже ошибки. Я написал только для одного метода.
    }
 
};
Я написал конструктор только для 1 метода из 4. Помогите, а то я особо не понимаю в этих конструкторах. Заранее спасибо.

Добавлено через 5 минут
Насколько я понимаю конструктор должен копировать только метод show(). Я там вивожу значения.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.09.2014, 17:27
Ответы с готовыми решениями:

Конструктор класса, конструктор копирования запускается не тот который нужен
Есть такой конструктор: Neuron::Neuron(int iType_activation_funk) { this-&gt;iType_act = iType_activation_funk; switch...

Создать конструктор копирования для класса "Прямоугольник"
Всем привет! Помогите разобраться, пожалуйста! Есть такое задание: Определить класс &quot;прямоугольник&quot;. Высчитать...

Конструктор копирования шаблонного класса
Всем доброго времени суток! Язык С++ изучаю относительно недавно и столкнулся с задачей, которую не могу решить. Описываю шаблонный класс...

32
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.09.2014, 10:33
Студворк — интернет-сервис помощи студентам
Вот работа того кода, который я выложил. Что не так?
Миниатюры
Создать конструктор копирования класса   Создать конструктор копирования класса  
0
0 / 0 / 2
Регистрация: 02.01.2014
Сообщений: 240
28.09.2014, 10:39  [ТС]
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
#define _CRT_SECURE_NO_WARNINGS
#include <cmath>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <vector>
#include <stdlib.h>
#include <iostream>
#include "lab2.h"
 
using namespace std;
 
int main() {
    vector <Triangle*> v;
    int otvet = 0, otvet1 = 0, otve = 0, n = 0;;
    do
    {
        printf("Menu:\n");
        printf("1. Press '1' to input data\n");
        printf("2. Press '2' to  output data\n");
        printf("3. Press '3' if you want exit\n");
        scanf("%d", &otve);
    } while (otve != 1 && otve != 2 && otve != 3);
    if (otve == 2){ printf("First you need to enter data\n"); otvet = 1; }
    else otvet = otve;
    Triangle tryk;
    // Ввод условий с клавиатуры
    if (otvet == 1){
        //tryk.set();
        while (true)
        {
            Triangle* ptr = new Triangle();
            ptr->set();
            v.push_back(ptr);
            printf("Continue? (y/n)\n");
            char ch;
            scanf("%s",&ch);
            if (ch != 'y' && ch != 'Y')
                break;
             n = v.size();
        }
    }
        printf("Press 1 to continue\n");
        scanf("%d", &otvet1);
        if (otvet1 == 1){
            tryk.usl();
        }
        if (otvet1 != 1) { exit(1); }
    if (otvet == 2){
    //Вывод условий
    //tryk.show();
    for (int i = 0; i < n; ++i)
        v[i]->show();
 
    for (int i = 0; i < n; ++i) // в классе сделать деструктор
        delete v[i];
}
printf("Press 1 to continue\n");
scanf("%d", &otvet1);
if (otvet1 == 1){
    tryk.usl();
}
if (otvet1 != 1){ exit(1); }
        //Выход
        if (otvet == 3){
            exit(1);
        }
        _getch();
}
Сам файл. А вот класс
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
#include <cmath>
#include <stdio.h>
#pragma once
class Triangle{
    friend class Copy;
    char name[31];
    int otvet = 0, otvet1 = 0, otve = 0;
    struct point {
        int x;
        int y;
    } *coordinates;
    double stores[3];
    double area = 0, p = 0;
public: 
    //Triangle::~Triangle(void);
    void set()
    {
        printf("Name: \n");
        scanf("%s", &name);
        coordinates = new point[3];
        for (int i = 0; i < 3; i++)
        {
 
            do
            {
                printf("Enter the coordinates of the %d vertices  : \n", i + 1);
                if (scanf("%d", &coordinates[i].x) && scanf("%d", &coordinates[i].y))
                    break;
                else
                {
                    printf("Error!\n");
                    clearerr(stdin);
                    while (getchar() != '\n');
                }
            } while (true);
        }
        for (int i = 0; i < 3; i++) {
            stores[i] = sqrt(double(coordinates[i].x*coordinates[i].x + coordinates[i].y*coordinates[i].y));
            //printf("Длина стороны №%d = %lf\n", i + 1, stores[i]);
            p += stores[i];
        }
        area = sqrt((p / 2)*(p / 2 - stores[0])*(p / 2 - stores[1])*(p / 2 - stores[2]));
    }
    void show(){
        printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", 0xDA, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xBF);
        printf("%c Name:                           %c\n", 0xB3, 0xB3);
        printf("%c%-33s%c\n", 0xB3, &name, 0xB3);
        printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", 0xC3, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xB4);
        printf("%c Coordinates:                    %c\n", 0xB3, 0xB3);
        for (int i = 0; i < 3; i++)
        {
            printf("%c              x= %d; y= %d         %c\n", 0xB3, coordinates[i].x, coordinates[i].y, 0xB3);
        }
        printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", 0xC3, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xB4);
        printf("%c Length:                         %c\n", 0xB3, 0xB3);
        for (int i = 0; i < 3; i++) {
            printf("%c length of the side N%d = %lf%c\n", 0xB3, i + 1, stores[i], 0xB3);
        }
        printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", 0xC3, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xB4);
        printf("%c Area:                           %c\n", 0xB3, 0xB3);
        printf("%c    area of a triangle = %lf%c\n", 0xB3, area, 0xB3);
        printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", 0xC0, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xD9);
    }
    void usl(){
        do
        {
            printf("Menu:\n");
            printf("1. Press '1' to input data\n");
            printf("2. Press '2' to  output data\n");
            printf("3. Press '3' if you want exit\n");
            scanf("%d", &otve);
        }while (otvet != 1 && otve != 2 && otve != 3);
    }
    ~Triangle(){
        {
            delete[] coordinates;
            delete[] name;
            }
    }
};
 
/*class Copy{
public:
    Triangle *tr;
    Copy(){
        tr = new Triangle;
        int j = 0;
    }
    // Конструктор копирования.        
    Copy(const Copy & obj)
    {
        int j;
        j++;
        tr = new Triangle;
 
        strcpy(tr->name, obj.tr->name);
 
        tr->coordinates = new Triangle::point[3];
        for (int i = 0; i < 3; ++i)
            tr->coordinates[i] = obj.tr->coordinates[i];
 
        for (int i = 0; i < 3; i++)
            tr->stores[i] = obj.tr->stores[i];
 
        tr->area = obj.tr->area;
        tr->p = obj.tr->p;
    }
};*/
Добавлено через 56 секунд
Ну, почему он у меня не работает??
0
0 / 0 / 2
Регистрация: 02.01.2014
Сообщений: 240
28.09.2014, 10:42  [ТС]
Вот что у меня
Миниатюры
Создать конструктор копирования класса   Создать конструктор копирования класса  
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.09.2014, 10:58
Цитата Сообщение от Mansu Посмотреть сообщение
Ну, почему он у меня не работает??
С выбором при нажатии разберитесь. Где у вас переход к show(), если:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
printf("Press 1 to continue\n");
        scanf("%d", &otvet1);
        if (otvet1 == 1){
            //tryk.usl();
        }
        if (otvet1 != 1) { exit(1); } // !!!
    if (otvet == 2)
    {
    //Вывод условий
    //tryk.show();
    n = v.size();
    for (int i = 0; i < n; ++i)
        v[i]->show();
Как тут двойка сработает? И удаление содержимого вектора нужно делать при выходе из программы, а не каждый раз после просмотра.
0
0 / 0 / 2
Регистрация: 02.01.2014
Сообщений: 240
28.09.2014, 11:17  [ТС]
Посмотрите внимательно весь код, тут двойка работает когда мне надо вывести. А написанно нажмите 1 чтоб перейти к главному меню. Переход к шов когда я нажму 2. И как сделать удаление содержимого в конце? Я ж не могу просто написать если нажато 3 то:
C++
1
2
3
4
5
~tryk(){
                        delete[] coordinates;
                        delete[] name;
                    }
            exit(1);
Добавлено через 1 минуту
Вот чясть того кода, который отвечает за 2, а вы её закоментили
C++
1
2
3
4
5
6
7
8
9
10
void usl(){
        do
        {
            printf("Menu:\n");
            printf("1. Press '1' to input data\n");
            printf("2. Press '2' to  output data\n");
            printf("3. Press '3' if you want exit\n");
            scanf("%d", &otve);
        }while (otvet != 1 && otve != 2 && otve != 3);
    }
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.09.2014, 11:27
Цитата Сообщение от Mansu Посмотреть сообщение
Переход к шов когда я нажму 2.
Как туда может быть переход, если напсано: если не 1, то exit?

Добавлено через 3 минуты
Это что?
Цитата Сообщение от Mansu Посмотреть сообщение
~tryk(){
Под name память выделяли, через new, что освобождаете её?
Цитата Сообщение от Mansu Посмотреть сообщение
delete[] name;
Добавлено через 1 минуту
Цитата Сообщение от Mansu Посмотреть сообщение
И как сделать удаление содержимого в конце?
...
Цитата Сообщение от Mansu Посмотреть сообщение
C++
1
2
3
n = v.size();
for (int i = 0; i < n; ++i) // в классе сделать деструктор
     delete v[i];
0
0 / 0 / 2
Регистрация: 02.01.2014
Сообщений: 240
28.09.2014, 11:39  [ТС]
exit(1) это если мы не захотим продолжать, то есть ввели данные и захотели выйти, а когда мы нажимаем 1 , то переходим сново в меню, а там уже нажимаем 2и выводим.

Добавлено через 2 минуты
и как мне перейти к шов, просто я думал v[i]->show(); выведёт шов, но я ошибался.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.09.2014, 11:47
Цитата Сообщение от Mansu Посмотреть сообщение
exit(1) это если мы не захотим продолжать, то есть ввели данные и захотели выйти, а когда мы нажимаем 1 , то переходим сново в меню, а там уже нажимаем 2и выводим.
Вот здесь остановка на ввод, после заполнения вектора. Как здесь перейти к if (otvet == 2)?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
printf("Press 1 to continue\n");
        scanf("%d", &otvet1);
        if (otvet1 == 1){
            //tryk.usl();
        }
        if (otvet1 != 1) { exit(1); } // !!!
    if (otvet == 2)
    {
    //Вывод условий
    //tryk.show();
    n = v.size();
    for (int i = 0; i < n; ++i)
        v[i]->show();
А из меню, нет перехода к if (otvet == 2).
0
0 / 0 / 2
Регистрация: 02.01.2014
Сообщений: 240
28.09.2014, 15:17  [ТС]
Ну как нету же?
C++
1
2
3
4
5
if (otvet1 == 1){
            tryk.usl(); Вот тут проверка на 2.
        }
        if (otvet1 != 1) { exit(1); }
        if (otvet == 2){
C++
1
2
3
4
5
6
7
8
9
10
void usl(){
        do
        {
            printf("Menu:\n");
            printf("1. Press '1' to input data\n");
            printf("2. Press '2' to  output data\n");
            printf("3. Press '3' if you want exit\n");
            scanf("%d", &otvet);
        }while (otvet != 1 && otvet != 2 && otvet != 3);
    }
Условие точно верно.

Добавлено через 3 минуты
Зачем Вы коментируете tryk.usl();. Оставте его и тогда поймете.

Добавлено через 5 минут
Хотя я понял, тут есть и мой косяк.

Добавлено через 9 минут
А так будет правельней?
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
int main() {
    vector <Triangle*> v;
    Triangle tryk;
    int otvet = 0, n = 0;
    while (otvet != 3){
        printf("Menu:\n");
        printf("1. Press '1' to input data\n");
        printf("2. Press '2' to  output data\n");
        printf("3. Press '3' if you want exit\n");
        scanf("%d", &otvet);
        switch (otvet){
            // Ввод условий с клавиатуры
        case 1:
            while (true)
            {
                Triangle* ptr = new Triangle();
                ptr->set();
                v.push_back(ptr);
                printf("Continue? (y/n)\n");
                char ch;
                scanf("%s", &ch);
                if (ch != 'y' && ch != 'Y')
                    break;
                n = v.size();
            }
            break;
        case 2: 
            //Вывод условий
            for (int i = 0; i < n; ++i)
                v[i]->show();
                //tryk.show();
 
 
                for (int i = 0; i < n; ++i) // в классе сделать деструктор
                    delete v[i];
                break;
        case 3:break;
            }
        }
    //exit(1);
            /*~Triangle(){
                        delete[] coordinates;
                    }*/
        _getch();
}
Добавлено через 7 минут
Чучуть починил, но оно всеравно выводит только первое.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.09.2014, 15:19
Цитата Сообщение от Mansu Посмотреть сообщение
Оставте его и тогда поймете.
Что я должен понять? Что у вас в коде всё нормально и он работает правильно? Зачем сделалли usl() в классе? К треугольнику меню не имеет никакого отношения. Надеюсь понимаете, что поля класса otvet, otvet1, otve не имею никакго отношения к переменным из main: otvet, otvet1, otve ?
0
0 / 0 / 2
Регистрация: 02.01.2014
Сообщений: 240
28.09.2014, 15:28  [ТС]
Странно, оно не выводи последнее. Я ввел 3 раза оно вывело только 2.

Добавлено через 3 минуты
C++
1
2
3
4
5
for (int i = 0; i <= n; ++i)
                v[i]->show();
                for (int i = 0; i <= n; ++i) 
                    delete v[i];
                break;
Вот так поправил и всё заработало. Помогите только с этим деструктором.

Добавлено через 4 минуты
Как написать условие на проверку пустой ли show?
C++
1
2
3
if (v[i] == NULL){
                printf("Error"); clearerr(stdin); break;
        }
Написал это, но наверное оно не правильно.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.09.2014, 15:33
Цитата Сообщение от Mansu Посмотреть сообщение
Вот так поправил и всё заработало.
Если работает - это ещё не значит, что правильно сделано. Вот это для кого написано?
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
3
n = v.size();
for (int i = 0; i < n; ++i)
  v[i]->show();
Писал уже:
Цитата Сообщение от alsav22 Посмотреть сообщение
И удаление содержимого вектора нужно делать при выходе из программы, а не каждый раз после просмотра.
Цитата Сообщение от Mansu Посмотреть сообщение
Помогите только с этим деструктором.
10 пост.
0
0 / 0 / 2
Регистрация: 02.01.2014
Сообщений: 240
28.09.2014, 15:41  [ТС]
Если я пишу в конце программы, тоесть после проверки на 3. То оно ошибку выдаёт.

Добавлено через 1 минуту
И подскажите аналог
C++
1
cin.getline(L,256);
только без <iostream>. Нужно проверить длину имени.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.09.2014, 15:41
Помогаю со студенческими работами здесь

Конструктор копирования для шаблонного класса
Не могу написать конструктор копирования для следующего класса: template &lt;typename T, typename A = std::allocator&lt;T&gt;&gt; struct...

Конструктор копирования для класса стек
Почему не хочет работать конструктор копирования? struct Item { int value; Item *next; }; class Int_stack {

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать конструктор по умолчанию, копирования и...

Cделать конструктор по умолчанию и копирования для класса
Вот у меня класс строка: class strg { char *str; int len; public: strg(); strg(const strg &amp;); }; реализация:

Конструктор копирования для динамического объекта класса приемника
class first_class { public: first_class(int q) { m_q=q; cout&lt;&lt;&quot;First class say HI&quot;&lt;&lt;endl; } ...


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru