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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
RosyRose
0 / 0 / 0
Регистрация: 28.07.2012
Сообщений: 23
02.09.2012, 15:35     Описать класс Друг #1
Нужно описать класс Друг.Данные класса имя,номер телефона,важность знакомства.
Методы должны обеспечить минимальную функциональность объекта
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2012, 15:35     Описать класс Друг
Посмотрите здесь:

C++ Описать класс
C++ Описать класс
C++ описать структуру, создать класс, в котором описать 3 поля: два простых типа и массив структур. Создать в классе 4 функции работы с массивом структур
Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты. C++
C++ Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
edward_jonson
 Аватар для edward_jonson
157 / 157 / 25
Регистрация: 23.02.2011
Сообщений: 388
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;
};
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 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);
}
RosyRose
0 / 0 / 0
Регистрация: 28.07.2012
Сообщений: 23
02.09.2012, 16:41  [ТС]     Описать класс Друг #4
и потом еще в main создавать объекты и просто обратиться к методам?

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

Добавлено через 2 минуты
Если есть возможность, добавьте пожалуйста комментарии.Особенно где указатели
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 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();
}
RosyRose
0 / 0 / 0
Регистрация: 28.07.2012
Сообщений: 23
02.09.2012, 16:45  [ТС]     Описать класс Друг #6
Кот Ангенс, если честно совсем не понимаю <iostream> и cout << f1.GetName() << ' ' << f2.GetName() << ' ' << f3.GetName();
чем это можно заменить?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
02.09.2012, 16:48     Описать класс Друг #7
RosyRose, Плюсы изучать. Зачем это чем-то заменять, если вы пишите на С++, а это - вывод на С++?
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 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());
}
RosyRose
0 / 0 / 0
Регистрация: 28.07.2012
Сообщений: 23
02.09.2012, 17:09  [ТС]     Описать класс Друг #9
Спасибо за подробный ответ!
В универе изучаем С++ один семестр, и еще не объясняли такой вывод. Я его пыталась сама освоить, но пока не очень получается.
Мы всегда пишем так как написал Кот Ангенс в последнем сообщении.
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
02.09.2012, 17:23     Описать класс Друг #10
Кот Ангенс, по мойму нелепо друзей клонировать .
получаются друзья с одинаковым номером телефона и именем .
Вообще бы запретил копирование и присваивание:
C++
1
2
3
private:
        Friend& operator=(const Friend&);
        Friend (const Friend&);

Не по теме:


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

novi4ok
549 / 502 / 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;
...
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
02.09.2012, 17:44     Описать класс Друг #12
MrCold, если внутри класса идет динамическое расределение памяти, должен быть определен конструктор копирования, оператор присваивания и, само собой, деструктор.
novi4ok, prio - short, так что ты спокойно можешь записывать туда свои enum'ы, если их не больше 1016.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
02.09.2012, 17:47     Описать класс Друг #13
Кот Ангенс, Зачем это конструктор копии и оператор присваивания должны быть определены? Их вполне можно поместить в закрытую секцию и не определять, чтобы запретить копирование и присваивание (ну или использовать delete, если соответствовать новому стандарту).
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
02.09.2012, 17:49     Описать класс Друг #14
Нет копирования и присваивания , а значит и динамическое расределение памяти никак не влияет
на ситуацию.
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
03.09.2012, 11:31     Описать класс Друг #15
ForEveR, а если кто-нибудь захочет создать стек друзей?
castaway
03.09.2012, 11:42
  #16

Не по теме:

Поправка:

Цитата Сообщение от Кот Ангенс Посмотреть сообщение
если их не больше 1016
216

novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
03.09.2012, 12:09     Описать класс Друг #17
Цитата Сообщение от Кот Ангенс Посмотреть сообщение
novi4ok, prio - short, так что ты спокойно можешь записывать туда свои enum'ы, если их не больше 1016.
причем здесь сколько их? городам и улицам не зря присваивают названия, а не дают номера (почтовые индексы и 5-я авеню не в счет). "друг с приоритетом 1000000000 - это непонятно, что за друг. а VstavitZuby сразу все проясняет.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.09.2012, 12:34     Описать класс Друг #18
Кот Ангенс, Если с С++11 то запросто, если нет - то нужен конструктор копии
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
03.09.2012, 12:59     Описать класс Друг #19

Не по теме:

Цитата Сообщение от lazybiz Посмотреть сообщение
216
Да, ошибся.


ForEveR, будет происходить выделение памяти с копированием содержимого или тупо копирование указателей?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2012, 13:57     Описать класс Друг
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.09.2012, 13:57     Описать класс Друг #20
Кот Ангенс, move конструктор будет зваться (если он конечно есть).

http://liveworkspace.org/code/ec9f01...784e73f22b8919
Yandex
Объявления
03.09.2012, 13:57     Описать класс Друг
Ответ Создать тему
Опции темы

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