Форум программистов, компьютерный форум 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++ Бинарные файлы В файле содержатся числа. Сформировать из них матрицу, содержащую пять элементов в строке. Лишние числа отбросить. Вывести на печать матрицу в общепринятом виде и посчитать сумму элементов, содержащихся в предпоследней строке. Числа могут вводиться либо пользователем, либо счетчиком случайных чисел. Количество чисел в файле задавать случайным образом, и оно должно быть неизвестно в основной... подробнее

Показать сообщение отдельно
Адренс Аксидор
5 / 5 / 1
Регистрация: 16.05.2012
Сообщений: 92
11.11.2013, 11:57  [ТС]     Класс со значением полей "по умолчанию"
Я делал так или в строке 14, или в 44: char *LastName="Ivanov", char *FirstName="Ivan", char *Patronimyc="Ivanovich", char *Group="sdw23", int Born=23

Добавлено через 40 минут
Вот как было раньше. Можете помочь исправить? Я просто не знаю, как сделать так, чтобы выделялась память под нужно число символов

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
181
182
#include <iostream>
using namespace std;
//Класс Студент
class TStudent
{
private:
    char *LastName; //Будем использовать указатели но определимся по размеру Фамилия не более 32 символов
    char *FirstName; //Имя не более 16 символов
    char *Patronimyc; //Отчество не более 32х символов
    int Born; //Год рождения
    char *Group; //Группа не более 10 символов
 
public:
    TStudent(); //Конструктор класса по умолчанию *просто выделим память под все поля
    
    ~TStudent(); //Деструтор класса
    TStudent (TStudent& Student); //Конструктор копирования по умолчанию
    TStudent operator= (TStudent& Student); //Оператор присвоения
    
    void SetLastName (char* sLastName);  //Присваивание Фамилии
    void SetFirstName (char* sFirstName);//Присваивание Имени
    void SetPatronimyc (char* sPatronimyc);//Приваивание отчества
    void SetGroup(char* sGroup);
 
    char* GetLastName(void); //Получение указателя на Фамилию
    char* GetFirstName(void);//Получение указателя на имя
    char* GetPatronimyc(void); //Получение указателя на Отчество
    int& BornDate(void); //Изменение даты рождения
    char* GetGroup(void);
    //Дружественная функция перезагрузки вывода в стандартный поток вывода (STDOUT)
    friend ostream& operator<< (ostream& out, 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*
    LastName = new char[32+1];
    memset(LastName,0,33);
    FirstName = new char[16+1];
    memset(FirstName,0,17);
    Patronimyc = new char[32+1];
    memset(Patronimyc, 0,33);
     Group = new char[10+1];
    memset(Group, 0,11);
};
//Конструктор копирования по-умолчанию
TStudent::TStudent (TStudent& Student)
{
    //В конструкторе копирования, так же выделим память на которые указывают указатели
    LastName = new char[32+1]; 
    FirstName = new char[16+1];
    Patronimyc = new char[32+1];
     Group = new char[10+1];
   
    //И скопируем в них значения из объекта класса на базе которого мы создаем объект путем копирования
    strcpy(LastName, Student.LastName);
    strcpy(FirstName, Student.FirstName);
    strcpy(Patronimyc, Student.Patronimyc);
    strcpy(Group, Student.Group);
    Born = Student.Born;
}
//Перезагрузка оператора присвоения 
TStudent TStudent::operator= (TStudent& Student) //Оператор присвоения
{
    strcpy(LastName, Student.LastName); 
    strcpy(FirstName, Student.FirstName);
    strcpy(Patronimyc, Student.Patronimyc);
      strcpy(Group, Student.Group);
    Born = Student.Born;
    return *this;
}
 
//Присваивание Фамилии
void TStudent::SetLastName (char* sLastName)
{
    strncpy(LastName,sLastName,32); //Скопируем с проверкой на длину что бы не было переполнения
}
 
//Присваивание Имени
void TStudent::SetFirstName (char* sFirstName)
{
    strncpy(FirstName,sFirstName,16); //Скопируем с проверкой на длину что бы не было переполнения
}
 
//Приваивание отчества
void TStudent::SetPatronimyc (char* sPatronimyc)
{
    strncpy(Patronimyc, sPatronimyc,32); //Скопируем с проверкой на длину что бы не было переполнения
}
 
//Приваивание Группы
void TStudent::SetGroup (char* sGroup)
{
    strncpy(Group, sGroup,11); //Скопируем с проверкой на длину что бы не было переполнения
}
 
 
 
 
//Получение указателя на Фамилию
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()
{
    delete[] LastName; //Отчистим память которую мы выделили
    delete[] FirstName;//Отчистим память которую мы выделили
    delete[] Patronimyc;//Отчистим память которую мы выделили
    delete[] Group;//Отчистим память которую мы выделили
}
 
 
 
//Точка входа (главная функция)
void main(void)
{ char f[32], n[16], p[32], g[16];
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<<"Конструктор по умолчанию + заполнение полей:"<< endl;
    cout<< D1; //Выведим на экран 
 
    //Создадим объект констуктором копирования
    TStudent D2(D1);
    //Если все было реализованно верно, то указатели D2 не должны быть равны указателям D1
    //Проверим это следующим образом
    cout<<"Проверка конструктора копирования по умолчанию, путем замены первой буквы фамилии на 'F':"<< endl;
    
    
    D2.GetLastName()[0] ='F';//Изменим первый символ фамилии D1 на 'F'
 
    cout << D2; //Выведим на экран сначало D1 и D2 (результаты должны быть разными
     cout<<"Выход из ф-ции main :"<< endl;
}
 
Текущее время: 03:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru