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

дружественные функции - C++

Восстановить пароль Регистрация
 
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
28.07.2011, 22:27     дружественные функции #1
Всем привет!!!
Есть код:
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
#include<iostream.h>
#include<conio.h>
#include<string.h>
 
enum Shape{prizm,parallelepiped,cube,pyramid,cone,cylinder};
static char* Shapes[]={"prizm","parallelepiped","cube","pyramid","cone","cylinder"};
 
class Body
{
   private:
  char* Name;
  Shape shape_s;
   public:
  Body(char* name,Shape s);
  ~Body();
};
 
  Body::Body(char *name,Shape s)
{
  Name=new char[strlen(name)+1];
  strcpy(Name,name);
  shape_s=s;
}
 
  Body::~Body()
  {delete[]Name;}
 
class Prizm: public Body
{
   private:
  float H;
    public:
  Prizm(char *name,Shape s,float h):Body(name,s)
  {H=h;}
};
 
class Cube: public Body
{
   private:
  float H;
   public:
 
  Cube(char *name,Shape s,float h):Body(name,s)
  {H=h;}
};
По заданию надо подружить 2 производных классов, для чего необходимо ввести в класс 2 функции и объявить их дружественными во втором классе. Одна из введенных функций должна возвращать имя объекта второго класса, другая - сравнивать высоту объектов.
Помогите пожалуйста реализовать, непонятно как написать в коде , заранее всем спасибо.

Добавлено через 1 час 18 минут
помогите кто чем может
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2011, 22:27     дружественные функции
Посмотрите здесь:

C++ дружественные функции
C++ Дружественные функции
C++ Дружественные функции
C++ Дружественные функции
C++ Дружественные функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Overmind024
99 / 99 / 6
Регистрация: 10.09.2010
Сообщений: 267
28.07.2011, 22:45     дружественные функции #2
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
#include<iostream>
#include<conio.h>
#include<string.h>
 
enum Shape{prizm,parallelepiped,cube,pyramid,cone,cylinder};
static char* Shapes[]={"prizm","parallelepiped","cube","pyramid","cone","cylinder"};
 
class Body
{
protected: // Сдесь толжно быть именно protected а не private. В противоположносм случае наследники не имеют не типа, не имени.
    char* Name;
    Shape shape_s;
public:
    Body(char* name,Shape s)
        :shape_s(s),Name(strcpy(new char[strlen(name)+1],name))
    {
        
    }
 
    ~Body()
    {
        delete[]Name;
    }
};
 
class Prizm: public Body
{
private:
    float H;
 
public:
    Prizm(char *name,Shape s,float h)
        :Body(name,s),H(h)
    {
 
    }
 
    friend class Cube;
};
 
class Cube: public Body
{
private:
    float H;
public:
 
    Cube(char *name,Shape s,float h)
        :Body(name,s),H(h)
    {
 
    }
 
    bool operator<(const Prizm& var) const
    {
        return H < var.H;
    }
 
    const char* your_name(const Prizm& var) const
    {
        return var.Name;
    }
};
 
int main()
{
    Prizm p("Prizma Petya",prizm,13);
    Cube c("Cube Victor",cube,12);
 
    if(c<p)
    {
        std::cout << c.your_name(p) << " great." << std::endl;
    }
    else
    {
        std::cout << c.your_name(p) << " less or equal." << std::endl;
    }
 
    std::cin.get();
    std::cin.get();
 
    return 0;
}
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
28.07.2011, 22:52  [ТС]     дружественные функции #3
Извините, спасибо огромное, но что означает

bool operator<(const Prizm& var) const
{
return H < var.H;
}
Ale-X91
2 / 2 / 0
Регистрация: 27.07.2011
Сообщений: 12
28.07.2011, 23:00     дружественные функции #4
Это перегруженный оператор сравнения. Он сравнивает объект, для которого был вызван этот метод и var, и возвращает результат типа bool.

Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
return H < var.H;
Т.е. результат сравнения - это H < var.H
Overmind024
99 / 99 / 6
Регистрация: 10.09.2010
Сообщений: 267
28.07.2011, 23:06     дружественные функции #5
Ну это функция сравнения. Лучше сразу пример.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class my
{
    bool less(my var)
    {
        ...
    }
 
    bool operator<(my var)
    {
        ...
    }
};
 
my a,b;
Разница в том что первая вызывается:
C++
1
 a.less(b);
А вторая:
C++
1
 a<b;
или
C++
1
a.operator<(b);
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
28.07.2011, 23:07  [ТС]     дружественные функции #6
извините, а var это объект класса, а можно как-нибудь попроще функцию расписать, а то я не такой продвинутый в знании си++
Overmind024
99 / 99 / 6
Регистрация: 10.09.2010
Сообщений: 267
29.07.2011, 02:27     дружественные функции #7
C++
1
2
3
4
bool less(my var)
{
     return H < var.H;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2011, 20:55     дружественные функции
Еще ссылки по теме:

C++ Дружественные функции
C++ Дружественные функции. Наследование. Перегрузка функции
Дружественные функции C++

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

Или воспользуйтесь поиском по форуму:
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
30.07.2011, 20:55  [ТС]     дружественные функции #8
Извините, но я noob в си++, разобрался как строяться дружественные функции и по какому алгоритму
C++
1
2
3
4
5
6
7
8
9
10
class A
{ public:
   std::string f1();    // -- для имени --
   double f2();          // -- для высоты --
};
class B
{  public:
    friend std::string A::f1();
    friend double A::f2();
};
но как написать данную конструкцию в свой код не сумею, я не понимаю как написать, если кто сможет, помогите

Добавлено через 1 час 6 минут
объясните как ето вставить

Добавлено через 19 часов 12 минут
подскажите пожалуйста в чем здесь теперь ошибка
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
#include<iostream.h>
#include<conio.h>
#include<string.h>
 
enum Shape{prizm,parallelepiped,cube,pyramid,cone,cylinder};
 
class Body
{
    protected:
  char* Name;
  Shape shape_s;
    public:
  Body(char* name,Shape s)
  {Name=new char[strlen(name)+1];
  strcpy(Name,name);
  shape_s=s;}
  ~Body()
  {delete[]Name;}
};
 
class Prizm: public Body
{   private:
  float H;
    public:
  Prizm(char *name,Shape s,float h):Body(name,s)
  {H=h;}
  friend void Cube::Srvanenie_H(Cube&cube,Prizm&prizm);
};
 
class Cube: public Body
{   private:
  float H;
    public:
  Cube(char *name,Shape s,float h):Body(name,s)
  {H=h;}
  void Srvanenie_H(Cube&cube,Prizm&prizm)
   {
    char result;
    if(prizm.H>cube.H) result='>';
       else if(prizm.H<cube.H) result='<';
             else result='=';
    return(result);
   }
};
Yandex
Объявления
30.07.2011, 20:55     дружественные функции
Ответ Создать тему
Опции темы

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