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

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

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

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

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

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

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

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

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

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

Функция, дружественная классу, вложенному в шаблонный класс, или как написать итератор. - C++
Здравствуйте! Пишу аналог STL vector. Возникают следующие ошибки: source.cpp:11: error: expected initializer before ‘operator’ ...

Класс "Человек" + дружественная функция сравнения по возрасту - C++
Создать класс человек и к нему дружественную функцию сравнения по возрасту (сравнение 2-х человек) class Human { private: ...

как сделать чтобы дружественная функция классу принимал ааргумент типа "класс" который при создании ничем не инициализирован? - C++
Друзья! Вот код, компилятор ругается на строку ff (f3); В общем переменную f3 необходимо объявлять без параметров, а потом передавать её...

Дружественная функция - C++
#include <iostream> #include <math.h> using namespace std; class massiv { int len,*p_mas; public : massiv() {} massiv...

Дружественная функция - C++
Хочу сделать вычисление площади как дружественную функцию, начал описывать, дальше догнать не могу как кодить. Подскажите? #include...

Дружественная функция - C++
описать классы автомобиль и маршрут. Использовать дружественную функцию определить количество потраченного топлива и время на преодоление...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
18.05.2014, 13:01 #2
Цитата Сообщение от Fakeoke Посмотреть сообщение
наработок нет...
Начинайте создавать. Хотя бы по первому абзацу.
Fakeoke
311 / 311 / 95
Регистрация: 28.07.2011
Сообщений: 1,842
19.05.2014, 15:14  [ТС] #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  [ТС] #4
аппп
тут работы то на 2 минуты, помогите незнающему
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.05.2014, 21:50 #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  [ТС] #6
C++
1
2
delete [] p.Fam;
   p.Fam = newf;
сначала удалили, а потом как-то в нее установили?

может надо было так?
C++
1
2
 p.Fam = newf;
delete [] newf;
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.05.2014, 23:11 #7
Цитата Сообщение от Fakeoke Посмотреть сообщение
сначала удалили, а потом как-то в нее установили?
Удалили память, на которую указывал p.Fam, потом присвоили этому указателю адрес новой памяти.
При знаке = происходит копирование только адреса (значение указателя) в данном случае. Поэтому, если сделать как Вы предлагаете, p.Fam потом будет указывать на освобожденную память. А это в свою очередь ошибочно (если попытаться потом ее использовать).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2014, 23:11
Привет! Вот еще темы с ответами:

Дружественная функция - C++
У меня есть класс, подсчитывающий количество равносторонних треугольников в заданном множестве точек на плоскости. Подскажите,...

Не вызывается дружественная функция - C++
Создал класс, есть дружественная функция: int NOD(int a,int b) { while(b) { a%=b; std::swap(a,b); ...

Дружественная 2-м классам функция. - C++
Код программы: #include &lt;iostream.h&gt; class matrix; class vector{ int size; int* vec; public: vector(int sz = 2){vec...

Дружественная функция. Графы - C++
Здравствуйте! Задача такая: Пересечением двух графов называется граф, все вершины и все ребра которого принадлежат как одному, так и...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.05.2014, 23:11
Ответ Создать тему
Опции темы

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