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

Класс со значением полей "по умолчанию" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Спрашиваю совет по стилю написания кода http://www.cyberforum.ru/cpp-beginners/thread1004181.html
#include <vector> #include <string> class Errors { private: size_t i; //Глобальный счетчик циклов. std::string exp; //Входящая строка.
C++ Количество треугольников и сумма их периметров При заданных А1,...Аn, В1,...Bn, C1,...Cn, для каждой из n троек вида (Ai, Bi, Ci) проверить может ли быть построен треугольник со сторонами Ai, Bi, Ci при этом посчитать число треугольников и сумму их периметров. c++ http://www.cyberforum.ru/cpp-beginners/thread1004175.html
Вывод количества вершин(узлов) на заданном уровне C++
Напишите пожалуйста прогу которая будет выводить количество вершин(узлов) на уровне который вводим с клавиатуры
C++ Как сделать нумерацию массива
есть код программы: #include <iostream> #include <conio.h> using namespace std; void pch (int i) // Ввод функци pch { cout <<"Vvedite masiv"<<i;// вывести на экран "Введите массив" нумерация под i }
C++ Декартово произведение http://www.cyberforum.ru/cpp-beginners/thread1004163.html
Помогите пожалуйста написать программу для вывода декартового произведения двух и более множеств. Немного написал кода, непосредственно само заполнение множеств, а вот как вывести в виде декартового произведения не знаю. Необязательно дописывать этот код, можно и свои варианты. #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv) {
C++ Бинарные файлы В файле содержатся числа. Сформировать из них матрицу, содержащую пять элементов в строке. Лишние числа отбросить. Вывести на печать матрицу в общепринятом виде и посчитать сумму элементов, содержащихся в предпоследней строке. Числа могут вводиться либо пользователем, либо счетчиком случайных чисел. Количество чисел в файле задавать случайным образом, и оно должно быть неизвестно в основной... подробнее

Показать сообщение отдельно
Extrim88
 Аватар для Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
11.11.2013, 13:52     Класс со значением полей "по умолчанию"
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include <iostream>
using namespace std;
//Класс Студент
class TStudent
{
private:
    char *LastName; 
    char *FirstName; 
    char *Patronimyc;
    int Born;
    char *Group; 
 
public:
    TStudent(char* last = "Petr", char* first = "Petrov", char* patr = "Petrovich", char* gr = "abc123", int bo = 25); *Group, int Born); //Конструктор класса по умолчанию *просто выделим память под все поля
    
    ~TStudent(); //Деструктор класса
    TStudent (const TStudent& Student); //Конструктор копирования по умолчанию
    TStudent operator= (const TStudent& Student); //Оператор присвоения
    TStudent test(const TStudent& s);
    void SetLastName (char* sLastName);  //Присваивание Фамилии
    void SetFirstName (char* sFirstName);//Присваивание Имени
    void SetPatronimyc (char* sPatronimyc);//Приваивание отчества
    void SetGroup(char* sGroup);
 
    char* GetLastName(); //Получение указателя на Фамилию
    char* GetFirstName();//Получение указателя на имя
    char* GetPatronimyc(); //Получение указателя на Отчество
    int& BornDate(); //Изменение даты рождения
    char* GetGroup();
    //Дружественная функция перезагрузки вывода в стандартный поток вывода (STDOUT)
    friend ostream& operator<< (ostream& out, const TStudent& Student)
    {
        out<<"Фамилия : "<< Student.LastName<< endl;
        out<<"Имя : "<< Student.FirstName<< endl;
        out<<"Отчество : "<< Student.Patronimyc<< endl;
         out<<"Группа : "<< Student.Group<< endl;
        out<<"Год рождения : "<< Student.Born<< endl<< endl;
        
        return out;
    }
 
};
//Конструктор по умолчанию *просто выделим память под все поля
TStudent::TStudent(char* last, char* first, char* patr, char* gr, int bo)
{     cout << "Вызов конструктора" << endl;
    //Выделим памяти для Фамилии, Имени и Отчества на которые указывают их указатели char*
    LastName = new char[strlen(last) + 1];
       FirstName = new char[strlen(first) + 1];
        Patronimyc = new char[strlen(patr) + 1];
     Group = new char[strlen(gr) + 1];
 
 
   };
//Конструктор копирования по-умолчанию
TStudent::TStudent (TStudent& Student)
{
    //В конструкторе копирования, так же выделим память на которые указывают указатели
    LastName = new char[]; 
    FirstName = new char[];
    Patronimyc = new char[];
     Group = new char[];
   
    //И скопируем в них значения из объекта класса на базе которого мы создаем объект путем копирования
   LastName=strdup(Student.LastName);
   FirstName =strdup(Student.FirstName);
    Patronimyc =strdup(Student.Patronimyc);
     Group = strdup(Student.Group);
     Born = Student.Born;
}
//Перезагрузка оператора присвоения 
TStudent TStudent::operator= (TStudent& Student) //Оператор присвоения
{
     LastName=strdup(Student.LastName);
   FirstName =strdup(Student.FirstName);
    Patronimyc =strdup(Student.Patronimyc);
     Group = strdup(Student.Group);
     Born = Student.Born;
    return *this;
}
 
//Присваивание Фамилии
void TStudent::SetLastName (char* sLastName)
{
    strcpy(LastName,sLastName); 
}
 
//Присваивание Имени
void TStudent::SetFirstName (char* sFirstName)
{
    strcpy(FirstName,sFirstName); 
}
 
//Присваивание отчества
void TStudent::SetPatronimyc (char* sPatronimyc)
{
    strcpy(Patronimyc, sPatronimyc); 
}
 
//Присваивание Группы
void TStudent::SetGroup (char* sGroup)
{
    strcpy(Group, sGroup); 
}
 
 
 
 
//Получение указателя на Фамилию
char* TStudent::GetLastName(void) 
{                                 
    return LastName;        }      
 
//Получение указателя на имя
char* TStudent::GetFirstName(void)  //Аналогично прошлой
{
    return FirstName;
}
 
//Получение указателя на Отчество
char* TStudent::GetPatronimyc(void)  //Так же аналогично
{
    return Patronimyc;
}
 
//Получение указателя на group
char* TStudent::GetGroup(void)  //Так же аналогично
{
    return Group;
}
 
 
 
 
//Возврат ссылки на дату рождения
int& TStudent::BornDate(void) //Возвращаем ссылку на ДатуРождения 
{
    return Born;
}
 
//Деструктор класса
 
TStudent::~TStudent()
{   cout << "Вызов деструктора" << endl;
    delete[] LastName; //Отчистим память которую мы выделили
    delete[] FirstName;//Отчистим память которую мы выделили
    delete[] Patronimyc;//Отчистим память которую мы выделили
    delete[] Group;//Отчистим память которую мы выделили
}
TStudent test(TStudent s){return s;}
TStudent test2 (TStudent &s){return s;}
TStudent& test3 (TStudent &s){return s;}
//Точка входа (главная функция)
void main(void)
{ char f[40], n[40], p[40], g[40];
int b;
    setlocale(LC_ALL,"Russian");
    cout<<"Вход ф-ции main :"<< endl;
    TStudent D1; //Создади объект класса конструктором по умолчанию
    //Заполним его
    cin >> f >> n >> p >> g >> b;
    D1.SetFirstName(n);
    D1.SetLastName(f);
    D1.SetPatronimyc(p);
    D1.SetGroup(g);
    D1.BornDate() = b;
    cout<< D1; //Выведим на экран 
 
    //Создадим объект констуктором копирования
    TStudent D2(D1);
    //Если все было реализованно верно, то указатели D2 не должны быть равны указателям D1
    //Проверим это следующим образом
    cout<<"Проверка конструктора копирования по умолчанию, путем замены первой буквы фамилии на 'F':"<< endl;
        
    D2.GetLastName()[0] ='F';//Изменим первый символ фамилии D1 на 'F'
     cout << D2; //Выведим на экран сначало D1 и D2 (результаты должны быть разными
    test(D1);  // 2 раза вызывается деструктор
    test2(D1);  // 1 раз
    test3(D1);  // деструктор не вызывается
    cout<<"Выход из ф-ции main :"<< endl;
}
 
Текущее время: 12:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru