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

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

Восстановить пароль Регистрация
 
Alexandr-
0 / 0 / 0
Регистрация: 15.09.2012
Сообщений: 78
15.11.2013, 21:21     Дружественные функции #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
46
47
48
49
50
51
#include <iostream>
#include <string>
using namespace std;
class Student {
    string surname;
    string name;
    int god_rojd;
    int god_post;
    friend void usl();
    friend void usl1();
public:
    Student() {}
    void info();
    void print();
};
void Student::info() {
cout<<"vvedite familiu"<<endl;
cin>>surname;
cout<<"vvedite imya"<<endl;
cin>>name;
cout<<"vvedite god rojdeniya"<<endl;
cin>>god_rojd;
cout<<"vvedite god postupleniya"<<endl;
cin>>god_post;  }   
 
//druj funkcii
void usl() 
    {int gr;
cout<<"vvedite god rojdeniya"<<endl; 
       if (gr==god_rojd) cout<<familiya<<endl;
    }   
void usl1() 
    {int im;
cout<<"vvedite imya"<<endl; 
       if (im==name) cout<<familiya<<endl;
    }   
//druj funkcii
 
void Student::print() {
    cout<<endl<<"informaciya o studente"<<endl;
    cout<<surname<<endl<<name<<god_rojd<<endl<<god_post<<endl; }
 
int main () { int n,i;
     cout<<"vvedite kolichestvo studentov: "<<endl;cin>>n;
    Student* student=new Student[n];
    for(i=0;i<n;i++)
    student[i].info();
    for(i=0;i<n;i++)
    student[i].print();
 
system("pause"); return 0; }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2013, 21:21     Дружественные функции
Посмотрите здесь:

C++ дружественные функции
Дружественные функции C++
C++ дружественные функции
C++ Дружественные функции
Дружественные функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
15.11.2013, 21:51     Дружественные функции #2
C++
1
2
3
4
5
6
7
8
9
10
void usl() 
    {int gr;
cout<<"vvedite god rojdeniya"<<endl; 
       if (gr==god_rojd) cout<<familiya<<endl;
    }   
void usl1() 
    {int im;
cout<<"vvedite imya"<<endl; 
       if (im==name) cout<<familiya<<endl;
    }
Тут разве не должен быть ввод gr и im ? И вообще зачем тут дружественные функции? Они ж ведь нужны для того, чтобы пользоваться объектами разных классов ... И что значит "вывод дружественных функций" ?
Alexandr-
0 / 0 / 0
Регистрация: 15.09.2012
Сообщений: 78
15.11.2013, 22:15  [ТС]     Дружественные функции #3
Да ввод должен быть(забыл дописать). Дружественные функции тут нужны из-за того, что в задании сказано сделать(. Я имел ввиду, как вывести эти дружественные функции, чтобы программа корректно работала(как простые функции их не вывести ведь)...

Дописал ввод gr и im:
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
#include <iostream>
#include <string>
using namespace std;
class Student {
    string surname;
    string name;
    int god_rojd;
    int god_post;
    friend void usl(Student &);
    friend void usl1(Student &);
public:
    Student() {}
    void info();
    void print();
};
void Student::info() {
cout<<"vvedite familiu"<<endl;
cin>>surname;
cout<<"vvedite imya"<<endl;
cin>>name;
cout<<"vvedite god rojdeniya"<<endl;
cin>>god_rojd;
cout<<"vvedite god postupleniya"<<endl;
cin>>god_post;  }   
 
 
void usl() 
    {int gr;
cout<<"vvedite god rojdeniya"<<endl; cin>>gr;
       if (gr==god_rojd) cout<<familiya<<endl;
    }   
void usl1() 
    {int im;
cout<<"vvedite imya"<<endl; cin>>im;
       if (im==name) cout<<familiya<<endl;
    }   
 
 
void Student::print() {
    cout<<endl<<"informaciya o studente"<<endl;
    cout<<surname<<endl<<name<<god_rojd<<endl<<god_post<<endl; }
 
int main () { int n,i;
     cout<<"vvedite kolichestvo studentov: "<<endl;cin>>n;
    Student* student=new Student[n];
    for(i=0;i<n;i++)
    student[i].info();
    for(i=0;i<n;i++)
    student[i].print();
 
    usl();
    usl1();
system("pause"); return 0; }
Иридодикциум
4 / 4 / 1
Регистрация: 07.01.2013
Сообщений: 31
15.11.2013, 22:20     Дружественные функции #4
Вывод студентов после поиска по году рождения или имени может надо по другому организовать, например так: создать массив записей, после чего объявить кол-во записей, и ввести нужное кол-во, в открывшемся for ввести и вывести, сделать поиск. Примерно так, но без дружественных (у меня) и можно без getline:
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <iostream>
#include <string>
#include<conio.h>
#include<malloc.h>
#include<windows.h>
using namespace std;
int k; 
class Gazeta
{ string Imya[25];string Izdatel[25];int Tiraz[25];
public:
Gazeta()
{   cout<<"Введите количество записей = "; cin>>k;
    for (int i=0;i<k;i++)
    {       cout<<"Наименование газеты - "; int cp=GetConsoleCP();SetConsoleCP(1251);
    cin.get();getline(cin,Imya[i]);cout<<"\n";SetConsoleCP(cp);
    cout<<"Издатель газеты - ";
    SetConsoleCP(1251); cin.get();getline(cin,Izdatel[i]);cout<<"\n";SetConsoleCP(cp);
    cout<<"Тираж газеты - ";
    SetConsoleCP(1251);cin>>Tiraz[i];cout<<"\n";SetConsoleCP(cp);
    }}
    void vyvod()
    {cout<<"''''''''''''''''''''''''''''''''''''''''''''\n";
    cout<<"&     Наименование    &  Издатель  & Тираж &\n";
    cout<<"''''''''''''''''''''''''''''''''''''''''''''\n";
for (int i=0;i<k+l;i++)
{cout<<"  ";cout<<Imya[i];cout<<"\t";cout<<Izdatel[i];cout<<"\t";cout<<Tiraz[i];cout<<"\n";
cout<<"''''''''''''''''''''''''''''''''''''''''''''\n";
}
}
void poisk()
{       int poisk; 
cout<<"Поиск происходит по полю:"<<endl;
cout<<"Наименование газеты-1, Издатель газеты-2, Тираж газеты-3"<<endl;int cp=GetConsoleCP();SetConsoleCP(1251);
cin>>poisk;SetConsoleCP(cp);
switch (poisk)
{ case 1:
{string c;
cout<<"Введите наименование газеты: "; SetConsoleCP(1251);cin.get();getline(cin,c);SetConsoleCP(cp);
int q=0;
cout<<"''''''''''''''''''''''''''''''''''''''''''''\n";
cout<<"&     Наименование    &  Издатель  & Тираж &\n";
cout<<"''''''''''''''''''''''''''''''''''''''''''''\n";
for (int i=0;i<k+l;i++)
{if (Imya[i]==c)
{cout<<"  ";cout<<Imya[i];cout<<"\t";cout<<Izdatel[i]; cout<<"\t";cout<<Tiraz[i];cout<<"\n";
cout<<"''''''''''''''''''''''''''''''''''''''''''''\n";
q++; } }
cout<<endl;
if (q==0)
{cout<<"Таких газет нет!"<<endl; }
cout<<endl;}
break;
case 2:
{string d;
cout<<"Введите издателя газеты: "; SetConsoleCP(1251);cin.get();getline(cin,d);SetConsoleCP(cp);
int q=0;
cout<<"''''''''''''''''''''''''''''''''''''''''''''\n";
cout<<"&     Наименование    &  Издатель  & Тираж &\n";
cout<<"''''''''''''''''''''''''''''''''''''''''''''\n";
for (int i=0;i<k+l;i++)
{if (Izdatel[i]==d)
{cout<<"  ";cout<<Imya[i];cout<<"\t";cout<<Izdatel[i]; cout<<"\t";cout<<Tiraz[i];cout<<"\n";
cout<<"''''''''''''''''''''''''''''''''''''''''''''\n";
q++;
} }
cout<<"\n";
if (q==0)
{cout<<"Таких газет нет!"<<endl;}cout<<"\n";}
break;
case 3:
{int t;
cout<<"Введите тираж газета: "; SetConsoleCP(1251);cin>>t;SetConsoleCP(cp);
int q=0;
cout<<"''''''''''''''''''''''''''''''''''''''''''''\n";
cout<<"&     Наименование    &  Издатель  & Тираж &\n";
cout<<"''''''''''''''''''''''''''''''''''''''''''''\n";
for (int i=0;i<k+l;i++)
{if (Tiraz[i]==t)
{cout<<"  ";cout<<Imya[i];cout<<"\t";cout<<Izdatel[i]; cout<<"\t";cout<<Tiraz[i];cout<<"\n";
cout<<"''''''''''''''''''''''''''''''''''''''''''''\n";
q++;
}
}
cout<<"\n";
if (q==0) {
cout<<"Таких газет нет!"<<endl;}
cout<<endl;}
break;
default:cout<<"Вы выбрали неверный пункт"<<endl;
}
}
 
};
int main()
{   setlocale (LC_ALL,"Russian");
    Gazeta ob;
    int punkt;
              cout<<"Меню:"<<endl;
              cout<<"Поиск записей - '''''''''''''''(1)"<<endl;
               cout<<"Выход - '''''''''''''''''''''''(2)"<<endl;
              cout<<endl;
              cout<<"Выберите пункт меню ";
              cin>>punkt;
              cout<<endl;
     while (punkt!=2)
              {
              switch (punkt)
              {system("cls");
        case 1:ob.poisk();  break;  
    
                            default:cout<<"Вы ничего не выбрали. Приложение будет закрыто"<<endl;
              }
            
              cout<<"Поиск записей - ''''''''''''''(1)"<<endl;
                cout<<"Выход - ''''''''''''''''''''''(2)"<<endl;
              cout<<"Выберите пункт меню ";
              cin>>punkt;
              cout<<endl;
    }
                 system("PAUSE");
    return EXIT_SUCCESS; }
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
15.11.2013, 22:24     Дружественные функции #5
Всё, понял

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
#include <iostream>
#include <string>
using namespace std;
class Student {
    string surname;
    string name;
    int god_rojd;
    int god_post;
public:
    Student() {}
    void info();
    void print();
    friend void usl(Student &);
    friend void usl1(Student &);
};
void Student::info() {
cout<<"vvedite familiu"<<endl;
cin>>surname;
cout<<"vvedite imya"<<endl;
cin>>name;
cout<<"vvedite god rojdeniya"<<endl;
cin>>god_rojd;
cout<<"vvedite god postupleniya"<<endl;
cin>>god_post;  }   
 
 
void usl() 
    {int gr;
cout<<"vvedite god rojdeniya"<<endl; cin>>gr;
       if (gr==god_rojd) cout<<familiya<<endl;
    }   
void usl1() 
    {int im;
cout<<"vvedite imya"<<endl; cin>>im;
       if (im==name) cout<<familiya<<endl;
    }   
 
 
void Student::print() {
    cout<<endl<<"informaciya o studente"<<endl;
    cout<<surname<<endl<<name<<god_rojd<<endl<<god_post<<endl; }
 
int main () { int n,i;
     cout<<"vvedite kolichestvo studentov: "<<endl;cin>>n;
    Student* student=new Student[n];
    for(i=0;i<n;i++)
    student[i].info();
    for(i=0;i<n;i++)
    student[i].print();
 
    usl();
    usl1();
system("pause"); return 0; }
Ну собсна по-идее должно работать) только у вас в прототипе и реализации разные входные параметры.
Иридодикциум
4 / 4 / 1
Регистрация: 07.01.2013
Сообщений: 31
15.11.2013, 22:28     Дружественные функции #6
по поводу правильного использования дружественных функций - то может ниже код чем-то поможет
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
#include<iostream>
#include<conio.h>
using namespace std;
float pic=3.141514;
 
class rdclas
{
    float n;
    float pi;
friend int perevod(rdclas ob, float pi);
public: 
    rdclas(float i) {n=i; pi=pic;} 
}; 
 
int perevod(rdclas ob, float pi)
{
    float grad; 
    grad=((180*ob.n)/pi);
    cout<<"В радианах: "<<ob.n<<'\n';
    cout<<"В градусах: "<<grad<<'\n';
    return grad;
};
 
int main ()
{
setlocale (LC_ALL,"Russian");
float x; 
cout<<"Введите значение угла в радианах: ";
cin>>x;
rdclas ob1(x); 
perevod(ob1,pic); 
getch();
return 0;}
Добавлено через 3 минуты
кусок проги другой копировала, поэтому и поиск и с выводом идут для k+l записей, а нужно для k
Alexandr-
0 / 0 / 0
Регистрация: 15.09.2012
Сообщений: 78
15.11.2013, 22:53  [ТС]     Дружественные функции #7
error C2065: 'god_rojd' : undeclared identifier
error C2065: 'familiya' : undeclared identifier
error C2065: 'name' : undeclared identifier
Он не видит их (.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2013, 00:43     Дружественные функции
Еще ссылки по теме:

C++ Дружественные функции
Дружественные функции С++ C++
Дружественные функции C++

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

Или воспользуйтесь поиском по форуму:
Иридодикциум
4 / 4 / 1
Регистрация: 07.01.2013
Сообщений: 31
17.11.2013, 00:43     Дружественные функции #8
Не видит в функциях?

Добавлено через 3 минуты
Так у Вас же
[CPP]class Student {
string surname;
string name;
int god_rojd;
int god_post;/[CPP]
Yandex
Объявления
17.11.2013, 00:43     Дружественные функции
Ответ Создать тему
Опции темы

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