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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Fakeoke
311 / 311 / 95
Регистрация: 28.07.2011
Сообщений: 1,842
#1

Дружественная функция. Класс Passport - C++

18.05.2014, 12:46. Просмотров 325. Ответов 6
Метки нет (Все метки)

Создать класс Passport со следующими полями:
-номер паспорта
-фамилия (указатель на строку)

Конструктор должен выделять память под строку, ориентируясь на длину введеной (переданной строки)

Методы записи и считывания надо организовать в 2х версиях :
- обычный public метод
- дружественная функция (объект принимается по ссылке)

Задание:
Создать 2 объекта
- для первого объекта использовать обычные методы
- для второго объекта использовать дружественную функцию

наработок нет...
в указателях не разбираюсь...
прошу помощи
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2014, 12:46     Дружественная функция. Класс Passport
Посмотрите здесь:

Дружественная 2-м классам функция. C++
Классы, конструктор, дружественная функция C++
C++ Дружественная функция
как сделать чтобы дружественная функция классу принимал ааргумент типа "класс" который при создании ничем не инициализирован? C++
Дружественная функция. Графы C++
C++ Функция, дружественная классу, вложенному в шаблонный класс, или как написать итератор.
C++ Дружественная функция
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
18.05.2014, 13:01     Дружественная функция. Класс Passport #2
Цитата Сообщение от Fakeoke Посмотреть сообщение
наработок нет...
Начинайте создавать. Хотя бы по первому абзацу.
Fakeoke
311 / 311 / 95
Регистрация: 28.07.2011
Сообщений: 1,842
19.05.2014, 15:14  [ТС]     Дружественная функция. Класс Passport #3
ну пусть что-то такое будет...
на компиляторе не проверял
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
class Passport
{
private:
int Number;
char *Fam;
 
friend setNumber(int, Passport &);
friend setFam(*char, Passport &);
public:
void setNumber();
void setFam();
void show();
};
void Passport::setNumber (int N);
{
Number = N;
}
void Passport::setFam (*str);
{
Fam = Str;
}
void Passport::show();
{
cout << Number << " " << Fam;
}
 
void setNumber (int N,Passport & p2);
{p2.Number = N};
 
void setFam (char *str,Passport &p2);
{p2.Fam = str};
 
int main()
{ Passport p1,p2;
p1.setNumber(100);
p1.setFam("Fam1");
p1.show();
 
setNumber(101,p2);
setFam("Fam2",p2);
show();
 
getch();
}
Fakeoke
311 / 311 / 95
Регистрация: 28.07.2011
Сообщений: 1,842
22.05.2014, 19:30  [ТС]     Дружественная функция. Класс Passport #4
аппп
тут работы то на 2 минуты, помогите незнающему
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
22.05.2014, 21:50     Дружественная функция. Класс Passport #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
friend setFam(char*, Passport &);
И я бы сделал объект на первом месте, т.е.
C++
1
friend void setFam(Passport &, const char*);
Теперь реализация:
C++
1
2
3
4
5
6
7
void setFam(Passport & p, const char* f)
{
   char* newf = new char[strlen(f)+1];
   strcpy( newf, f );
   delete [] p.Fam;
   p.Fam = newf;
}
Аналогично под функцию-член. Потом можно выделить общую часть для конструктора и функции установки фамилии чтобы избежать дублирования кода.
Fakeoke
311 / 311 / 95
Регистрация: 28.07.2011
Сообщений: 1,842
22.05.2014, 22:51  [ТС]     Дружественная функция. Класс Passport #6
C++
1
2
delete [] p.Fam;
   p.Fam = newf;
сначала удалили, а потом как-то в нее установили?

может надо было так?
C++
1
2
 p.Fam = newf;
delete [] newf;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2014, 23:11     Дружественная функция. Класс Passport
Еще ссылки по теме:

C++ Дружественная функция
C++ Дружественная функция класса
C++ Класс "Человек" + дружественная функция сравнения по возрасту
C++ Дружественная функция
C++ Не вызывается дружественная функция

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
22.05.2014, 23:11     Дружественная функция. Класс Passport #7
Цитата Сообщение от Fakeoke Посмотреть сообщение
сначала удалили, а потом как-то в нее установили?
Удалили память, на которую указывал p.Fam, потом присвоили этому указателю адрес новой памяти.
При знаке = происходит копирование только адреса (значение указателя) в данном случае. Поэтому, если сделать как Вы предлагаете, p.Fam потом будет указывать на освобожденную память. А это в свою очередь ошибочно (если попытаться потом ее использовать).
Yandex
Объявления
22.05.2014, 23:11     Дружественная функция. Класс Passport
Ответ Создать тему
Опции темы

Текущее время: 23:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru