Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
1

Классы, наследование

22.10.2012, 18:37. Показов 1879. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно, задача поставлена так, в файле N логинов и паролей, которые считываются и проверяются с теми что введены с клавиатуры.
Проблема: застрял на сравнение, не пойму что происходить..
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
#define _CRT_SECURE_NO_WARNINGS
#include "stdafx.h"
#include "iostream"
#include "cstdio"
#include "cstdlib"
#include "conio.h"
#include "string"
 
#define N 2
using namespace std;
 
class system
{
private:
    char name[20];
    int password;
public:
    void set_name();
    char* get_name();
    void set_pas();
    int get_pas();
};
class chek : public system
{
private:
    char cname[20];
    int cpassword;
public:
    void File(FILE*);
    void chek_name();
    void chek_pas();
};
 
 
void main()
{
    class system s;
    chek c;
    FILE* fp;
    fp = fopen("D:\\memb.txt","r");
    if(fp==NULL)
    {
        cout<<"Error."<<endl;
        exit(1);
    }   
    cout<<"\t\tWELCOME IN KLIM-SYSTEM\n\n"<<endl;
    cout<<"Enter login: ";
    s.set_name();   
    c.chek_name();
    cout<<"Enter password: ";
    s.set_pas();
    c.chek_pas();
    fclose(fp);
}
 
void system::set_name()
{
    cin>>name;
}
char* system::get_name()
{
    return name;
}
void system::set_pas()
{
    cin>>password;
}
int system::get_pas()
{
    return password;
}
 
void chek::File(FILE* fp)
{
    fscanf(fp,"%s",cname);
    fscanf(fp,"%i",cpassword);
}
void chek::chek_name()
{
    class system s;
    chek c[N];
        
    for(int i=0; i<N; i++)
    {
        if(c[i].cname==s.get_name())
        {
            cout<<"lol"<<endl;
            break;
        }
        else
        {
            cout<<"lol2"<<endl;
            exit(1);
        }
    }
}
void chek::chek_pas()
{
    class system s;
    chek c[N];
    
    for(int i=0; i<N; i++)
    {
        if(c[i].cpassword==s.get_pas())
        {
            cout<<"lol"<<endl;
            break;
        }
        else
        {
            cout<<"lol2"<<endl;
            exit(1);
        }
    }
}
собственно, наведите на путь истенный.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2012, 18:37
Ответы с готовыми решениями:

Наследование, базовые классы и производные классы
Добрый вечер.Задание: необходимо разработать поля и методы наследуемые из базового класса и...

Классы и наследование (Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию вычисления объёма.)
Уважаевые, помогите написать прожку на экзамене: Создать класс 3D фигура, и производные классы...

Классы. Наследование
Приветствую всех участников форума! Требуется помощь. Итак, задание Написать программу,...

Классы, наследование
как сделать, что бы вызывался деструктор B? Кроме как &quot;delete (B*)var;&quot; class A { public:...

26
2276 / 1767 / 741
Регистрация: 27.07.2012
Сообщений: 5,250
22.10.2012, 19:44 2
C++
1
class system
не называйте класс system. Есть такая функция и лишние конфликты имён вам ни к чему. Назовите хотя бы с большой буквы System или TSystem.
C++
1
class system s;
Объявление объектов класса должно выглядет так:
C++
1
system s;
без ключевого слова class.
1
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 19:55  [ТС] 3
Точно а я то думал почему компилятор ругался на мой system когда я его объявлял, теперь в этом плане все сходиться.

Но к сожалению проблема актуальна, именно в момент сравнения, то что было введено и что храниться в файле! =(
0
2276 / 1767 / 741
Регистрация: 27.07.2012
Сообщений: 5,250
22.10.2012, 20:02 4
Цитата Сообщение от Br8k Посмотреть сообщение
Но к сожалению проблема актуальна, именно в момент сравнения, то что было введено и что храниться в файле!
Поподробнее, пжл. И с фрагментами кода, за это отвечающими.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
22.10.2012, 20:02 5
John Prick,
Объявление объектов класса должно выглядет так:
Неверно. Вторую форму никто не запрещал (class C c; - вполне корректное объявление).
2
2276 / 1767 / 741
Регистрация: 27.07.2012
Сообщений: 5,250
22.10.2012, 20:05 6
Не знал. Хотя может и знал, но забыл, ибо не применяю и не встречалось.
Век живи, век учись
0
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 20:10  [ТС] 7
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
void chek::chek_name()
{
    class system s;
    chek c[N];
        
    for(int i=0; i<N; i++)
    {
        if(c[i].cname==s.get_name())
        {
            cout<<"lol"<<endl;
            break;
        }
        else
        {
            cout<<"lol2"<<endl;
            exit(1);
        }
    }
}
void chek::chek_pas()
{
    class system s;
    chek c[N];
    
    for(int i=0; i<N; i++)
    {
        if(c[i].cpassword==s.get_pas())
        {
            cout<<"lol"<<endl;
            break;
        }
        else
        {
            cout<<"lol2"<<endl;
            exit(1);
        }
    }
}
вот здесь происходить сравнение, может конечно что-то не так, но не пойму, что ибо запускается, а когда доходит до сравнение щитает что введены неверные данные..
0
2276 / 1767 / 741
Регистрация: 27.07.2012
Сообщений: 5,250
22.10.2012, 20:17 8
Ну так вы используете новый объект s в каждой функции, а не тот, который вводили с клавиатуры.
0
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 20:20  [ТС] 9
Немного не понял суть.
0
2276 / 1767 / 741
Регистрация: 27.07.2012
Сообщений: 5,250
22.10.2012, 20:31 10
C++
1
2
    s.set_name();   
    c.chek_name();
вводим имя в функции set_name(), как я понял. А проверяем в другом объекте, которому введённое имя недоступно. Вот я о чём.
0
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 20:35  [ТС] 11
разве при наследовании "имя/пароль" недоступны?
0
2276 / 1767 / 741
Регистрация: 27.07.2012
Сообщений: 5,250
22.10.2012, 20:43 12
Ну а причём тут наследование? У вас вводится имя в одном объекте, а проверяется в другом.
0
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 20:47  [ТС] 13
я понимаю, но почему данное имя не доступно там?
0
2276 / 1767 / 741
Регистрация: 27.07.2012
Сообщений: 5,250
22.10.2012, 21:10 14
Потому что всё, что классу доступно - это набор своих полей, а также открытых и защищённых полей базовых классов. Но это всё в пределах одного объекта. Другой объект - это другой объект, ему ничего не доступно от других объектов.
0
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 21:18  [ТС] 15
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#define _CRT_SECURE_NO_WARNINGS
#include "stdafx.h"
#include "iostream"
 
using namespace std;
 
#define N 2
 
class Cpol
{
public:
    char name[20];
    unsigned pas;
 
    void SetName();
    char* GetName();
    void SetPas();
    unsigned GetPas();
};
 
class Cfile : public Cpol
{
    char fname[20];
    unsigned fpas;
public:
    void ReadFile(FILE*);
    void FSetName(char* finame);
    char* FGetName();
    void FSetPas(unsigned fipas);
    unsigned FGetPas();
    void ChekName();
    void ChekPas();
};
 
void main()
{
    Cpol p;
    Cfile c;
    Cfile pol[N];
 
    FILE* fp;
    if((fp=fopen("D:\\memb.txt","r"))==NULL)
    {
        cout<<"Error."<<endl;
        exit(1);
    }
 
    for(int i=0; i<N; i++)
        pol[i].ReadFile(fp);
 
    
    cout<<"Login: ";
    p.SetName();
    c.ChekName();
 
    cout<<"Password: ";
    p.SetPas();
    c.ChekPas();
}
 
void Cpol::SetName()
{
    cin>>name;
}
char* Cpol::GetName()
{
    return name;
}
void Cpol::SetPas()
{
    cin>>pas;
}
unsigned Cpol::GetPas()
{
    return pas;
}
void Cfile::ReadFile(FILE* fl)
{
    fscanf(fl,"%s", fname);
    fscanf(fl,"%d", fpas);
}
void Cfile::FSetName(char* finame)
{
    strcpy(finame, fname);
}
char* Cfile::FGetName()
{
    return fname;
}
void Cfile::FSetPas(unsigned fipas)
{
    fipas=fpas;
}
unsigned Cfile::FGetPas()
{
    return fpas;
}
void Cfile::ChekName()
{
    Cpol p;
    Cfile c;
    Cfile pol[N];
    unsigned pop=0;
    
    do
    {
        for(int i=0; i<N; i++)
        {
            if(p.GetName()==pol[i].FGetName())
            {
                cout<<"You login"<<endl;
                break;
            }
            else
                pop+=1;
        }
            
    }while(pop==N);
        
    if(pop==N)
    {
        cout<<"Wrong login"<<endl;
        exit(1);
    }
}
void Cfile::ChekPas()
{
    Cpol p;
    Cfile c;
    Cfile pol[N];
    unsigned pop=0;
 
    do
    {
        for(int i=0; i<N; i++)
        {
            if(p.GetPas()==pol[i].GetPas())
            {
                cout<<"You login"<<endl;
                break;
            }
            else
                pop+=1;
        }
            
    }while(pop==N);
        
    if(pop==N)
    {
        cout<<"Wrong login"<<endl;
        exit(1);
    }
}
написал все с 0, не пойму в чем проблема...
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.10.2012, 21:22 16
есть две собаки. одинаковой породы (класса). обе унаследованы от класса "четвероногое животное". одной дали кость, а второй - нет. почему одна сидит и грызет, а вторая слюной давится? ведь они одного класса!?
0
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 21:25  [ТС] 17
я понимаю к чему вы ведёте, но не могу этого реализовать, я иссяк почти.
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.10.2012, 21:41 18
ты создал еще более интересную констелляцию: у тебя есть два объекта: один - собака (тип, унаследованный от четвероногого), и оди объект - просто четвероногое. ты четвероногому дал что-то, а забрать хочешь у собаки. дело не в том, что это объекты разных типов: ты не нарушаешь в этом плане ничего.
понимаешь, твой Cfile - это тоже Cpol, и более того. наоборот - неправда. что может Cfile, то не умеет Cpol (кроме вещей, которые первый у него унаследовал).
но это - касаемо типа объекта (т.е. собака это или просто четвероногое), а не конкретного объекта. если ты дал кость какой-то собаке, а какой-то - нет, то отобрать ее можно только у той, которой дал. НЕ ПУТАЙ ТИП ОБЪЕКТА С КОНКРЕТНЫМ ЭКЗЕМПЛЯРОМ ОБЪЕКТА ДАННОГО ТИПА!
0
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 22:20  [ТС] 19
Цитата Сообщение от Br8k Посмотреть сообщение
if(p.GetName()==pol[i].FGetName())
но ведь здесь, я ссылаюсь на объект что одного, что другого класса, если я не ошибаюсь =\
а можно без собак более литературный языком, пожалуйста, я так лучше пойму.

p.s. вы хотите сказать что таким образом никак нельзя сравнить эти два объекта? ведь я читал что у классов очень большие возможности..

Добавлено через 1 минуту
если под костью подразумевается ввод лоигна\пароля, то я его ввожу, до сравнения.

Добавлено через 32 минуты
//summon guru
0
2276 / 1767 / 741
Регистрация: 27.07.2012
Сообщений: 5,250
22.10.2012, 22:52 20
C++
1
if(p.GetName()==pol[i].FGetName())
Вот для этого p вы функцию ввода имени не вызывали.
0
22.10.2012, 22:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2012, 22:52
Помогаю со студенческими работами здесь

Наследование/классы
class BaseClass { public: void print() { std::cout &lt;&lt; &quot;123\r\n&quot;; } }; class DirivedClass:...

Классы и наследование.
Здравствуйте,выручите решением,пожалуйста. Задача : Создать произвольный класс,путем наследования...

Классы и наследование
Помогите написать программу, в которой описана иерархия классов: геометрические фигуры(ромб,...

Классы, наследование
Имеется код, помогите сделать на его основе хоть какое-нибудь наследование #include &lt;iostream&gt;...

Классы. Наследование
Народ, помогите пожалуйста, я в ступоре, понимаю, что дико торможу сейчас... но все же вопрос ...

Классы, наследование
Есть родительский класс Base, у него дочерний класс Child1, у Child1 дочерний Child2; Задача в том...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru