Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
RosyRose
0 / 0 / 0
Регистрация: 28.07.2012
Сообщений: 23
#1

Описать класс Друг - C++

02.09.2012, 15:35. Просмотров 1227. Ответов 20
Метки нет (Все метки)

Нужно описать класс Друг.Данные класса имя,номер телефона,важность знакомства.
Методы должны обеспечить минимальную функциональность объекта
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2012, 15:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Описать класс Друг (C++):

Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты - C++
Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты.

Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты. - C++
Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.

Класс-друг - C++
#include <iostream> using namespace std; class first { public: friend second; private: int First; };

Класс - друг - C++
Всем доброго дня !!! Столкнулся с проблемой при обьявлении класса Dasa другом класса Da. В классе Da есть функция void nes () ...

Класс - друг. Доступ к полям и методам - C++
Есть два класса: MainWindow и LBM_computation, в одном из них происходят вычисления. Класс MainWindow - для визуализации. Надо сделать так,...

Описать структуру "Друг" - C++
Всем привет! Помогите привести в нормальный вид программу .Надо описать структуру с именем DRUG ,содержащую след.поля: -фамилия и...

20
edward_jonson
158 / 158 / 25
Регистрация: 23.02.2011
Сообщений: 392
02.09.2012, 16:22 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Friend {
public:
    Friend(std::string _name = "", std::string _phoneNumb = "", int _imp = 0) :
        name(_name), phoneNumb(_phoneNumb), imp(_imp) {}
    void set_name(const std::string& _name) {
        name = _name;
    }
    std::string get_name() const {
        return name;
    }
    // и по 2 пары таких же методов с другими полями
private:
   std::string name;
   std::string phoneNumb;
   int imp;
};
1
Кот Ангенс
318 / 268 / 38
Регистрация: 24.05.2012
Сообщений: 629
02.09.2012, 16:24 #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
//Friend.h:
#ifndef FRIEND_H
#define FRIEND_H
 
    class Friend {
        char* name;
        char* phone;
        short prio;
    public:
        Friend(const char name[ ] = "", const char phone[ ] = "", short prio = 0);
        Friend(const Friend&);
        ~Friend();
        Friend& operator=(const Friend&);
        bool operator==(const Friend&) const;
        bool operator!=(const Friend& f) const { return !(*this == f); }
        const char* GetName() const { return name; }
        char* SetName(const char[ ]);
        const char* GetPhone() const { return phone; }
        char* SetPhone();
        short GetPrio() const { return prio; }
        short SetPrio(short p) { return prio = p; }
    };
 
#endif
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
//Friend.cpp:
#include <cstring>
#include "Friend.h"
 
Friend::Friend(const char nm[ ], const char ph[ ], short p) {
    name = new char[strlen(nm) + 1];
    phone = new char[strlen(ph) + 1];
    strcpy(name, nm);
    strcpy(phone, ph);
    prio = p;
}
 
Friend::Friend(const Friend& f): Friend(f.name, f.phone, f.prio) { }
 
Friend::~Friend() {
    delete[ ] name;
    delete[ ] phone;
}
 
Friend& Friend::operator=(const Friend& f) {
    delete[ ] name;
    delete[ ] phone;
    name = new char[strlen(f.name) + 1];
    phone = new char[strlen(f.phone) + 1];
    strcpy(name, f.name);
    strcpy(phone, f.phone);
    prio = f.prio;
    return *this;
}
 
bool Friend::operator==(const Friend& f) const {
    return prio == f.prio && !strcmp(name, f.name) && !strcmp(phone, f.phone);
}
 
char* Friend::SetName(const char nm[ ]) {
    delete[ ] name;
    name = new char[strlen(nm) + 1];
    strcpy(name, nm);
}
 
char* Friend::SetPhone(const char ph[ ]) {
    delete[ ] phone;
    phone = new char[strlen(ph) + 1];
    strcpy(phone, ph);
}
1
RosyRose
0 / 0 / 0
Регистрация: 28.07.2012
Сообщений: 23
02.09.2012, 16:41  [ТС] #4
и потом еще в main создавать объекты и просто обратиться к методам?

Добавлено через 21 секунду
Спасибо большое!

Добавлено через 2 минуты
Если есть возможность, добавьте пожалуйста комментарии.Особенно где указатели
0
Кот Ангенс
318 / 268 / 38
Регистрация: 24.05.2012
Сообщений: 629
02.09.2012, 16:42 #5
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include "Friend.h"
 
int main() {
    Friend f1 = "Alex";
    Friend f2("John", "52-70-81");
    Friend f3 = Friend("James", "12-34-56", 5);
    cout << f1.GetName() << ' ' << f2.GetName() << ' ' << f3.GetName();
}
1
RosyRose
0 / 0 / 0
Регистрация: 28.07.2012
Сообщений: 23
02.09.2012, 16:45  [ТС] #6
Кот Ангенс, если честно совсем не понимаю <iostream> и cout << f1.GetName() << ' ' << f2.GetName() << ' ' << f3.GetName();
чем это можно заменить?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
02.09.2012, 16:48 #7
RosyRose, Плюсы изучать. Зачем это чем-то заменять, если вы пишите на С++, а это - вывод на С++?
0
Кот Ангенс
318 / 268 / 38
Регистрация: 24.05.2012
Сообщений: 629
02.09.2012, 16:50 #8
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
//Friend.h:
#ifndef FRIEND_H
#define FRIEND_H
 
    class Friend {
        char* name;
        char* phone;
        short prio;
    public:
        //Конструктор по умолчанию
        Friend(const char name[ ] = "", const char phone[ ] = "", short prio = 0);
        //Конструктор копирования
        Friend(const Friend&);
        //Деструктор
        ~Friend();
        //Оператор присваивания
        Friend& operator=(const Friend&);
        //Компараторы
        bool operator==(const Friend&) const;
        bool operator!=(const Friend& f) const { return !(*this == f); }
        //Свойства
        const char* GetName() const { return name; }
        char* SetName(const char[ ]);
        const char* GetPhone() const { return phone; }
        char* SetPhone();
        short GetPrio() const { return prio; }
        short SetPrio(short p) { return prio = p; }
    };
 
#endif
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
//Friend.cpp:
#include <cstring>
#include "Friend.h"
 
Friend::Friend(const char nm[ ], const char ph[ ], short p) {
    //Выделяем память и копируем
    name = new char[strlen(nm) + 1];
    phone = new char[strlen(ph) + 1];
    strcpy(name, nm);
    strcpy(phone, ph);
    prio = p;
}
 
//Перенаправление на другой конструктор
Friend::Friend(const Friend& f): Friend(f.name, f.phone, f.prio) { }
 
Friend::~Friend() {
    //Освобождаем память
    delete[ ] name;
    delete[ ] phone;
}
 
Friend& Friend::operator=(const Friend& f) {
    //Тут все интуитивно понятно
    SetName(f.name);
    SetPhone(f.phone);
    SetPrio(f.prio);
    return *this;
}
 
bool Friend::operator==(const Friend& f) const {
    //Объекты равны, если у них одинаковый приоритет, а также совпадают имена и телефоны
    return prio == f.prio && !strcmp(name, f.name) && !strcmp(phone, f.phone);
}
 
char* Friend::SetName(const char nm[ ]) {
    //Освобождаем память, которую занимала предыдущая строка
    delete[ ] name;
    //Выделяем под размер новой и копируем
    name = new char[strlen(nm) + 1];
    strcpy(name, nm);
}
 
char* Friend::SetPhone(const char ph[ ]) {
    //То же самое
    delete[ ] phone;
    phone = new char[strlen(ph) + 1];
    strcpy(phone, ph);
}
Цитата Сообщение от RosyRose Посмотреть сообщение
чем это можно заменить?
Это же стандартная библиотека ввода/вывода C++. Можно, конечно, использовать Сишные функции:
C++
1
2
3
4
5
6
7
8
9
10
//main.cpp:
#include <cstdio>
#include "Friend.h"
 
int main() {
    Friend f1 = "Alex";
    Friend f2("John", "58-70-81");
    Friend f3 = Friend("James", "12-34-56", 5);
    printf("%s %s %s", f1.GetName(), f2.GetName(), f3.GetName());
}
1
RosyRose
0 / 0 / 0
Регистрация: 28.07.2012
Сообщений: 23
02.09.2012, 17:09  [ТС] #9
Спасибо за подробный ответ!
В универе изучаем С++ один семестр, и еще не объясняли такой вывод. Я его пыталась сама освоить, но пока не очень получается.
Мы всегда пишем так как написал Кот Ангенс в последнем сообщении.
0
MrCold
855 / 753 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
02.09.2012, 17:23 #10
Кот Ангенс, по мойму нелепо друзей клонировать .
получаются друзья с одинаковым номером телефона и именем .
Вообще бы запретил копирование и присваивание:
C++
1
2
3
private:
        Friend& operator=(const Friend&);
        Friend (const Friend&);

Не по теме:


хотя в жизни мне бы пригодилось

0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
02.09.2012, 17:33 #11
... и заменил бы int priority на enum:
C++
1
2
3
4
5
6
7
8
9
10
11
class Friend {
public:
  enum {
    BuchaliVmesteKogdato = 0,
    KuritNa4inali,
    SideliSaOdnojPartoj,
    SanjatDeneg,
    VstavitZuby
    ...
    } Priority;
...
0
Кот Ангенс
318 / 268 / 38
Регистрация: 24.05.2012
Сообщений: 629
02.09.2012, 17:44 #12
MrCold, если внутри класса идет динамическое расределение памяти, должен быть определен конструктор копирования, оператор присваивания и, само собой, деструктор.
novi4ok, prio - short, так что ты спокойно можешь записывать туда свои enum'ы, если их не больше 1016.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
02.09.2012, 17:47 #13
Кот Ангенс, Зачем это конструктор копии и оператор присваивания должны быть определены? Их вполне можно поместить в закрытую секцию и не определять, чтобы запретить копирование и присваивание (ну или использовать delete, если соответствовать новому стандарту).
0
MrCold
855 / 753 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
02.09.2012, 17:49 #14
Нет копирования и присваивания , а значит и динамическое расределение памяти никак не влияет
на ситуацию.
0
Кот Ангенс
318 / 268 / 38
Регистрация: 24.05.2012
Сообщений: 629
03.09.2012, 11:31 #15
ForEveR, а если кто-нибудь захочет создать стек друзей?
0
03.09.2012, 11:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2012, 11:31
Привет! Вот еще темы с ответами:

Описать класс «Монитор» - C++
Описать класс «Монитор», имеющий закрытые атрибуты для хранения марки, диагонали и гарантийного срока монитора и два конструктора: без...

Описать класс Fraction - C++
здравствуйте нужна ваша помощь задание Создайте класс Fraction. Данные класса должны быть представлены двумя полями: числителем и...

Описать класс прямоугольника - C++
help!!!!! описать класс прямоугольника с полями: координаты левого верхнего и правого нижнего углов.Задать функцию сравнения периметров...

Описать класс Дата - C++
Описать класс «Дата» - день, месяц (в виде числа), год. Предусмотреть возможность задания месяца в виде строки, возможность вывода даты на...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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