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

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

Войти
Регистрация
Восстановить пароль
 
 
Br8k
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
#1

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

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

Собственно, задача поставлена так, в файле 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);
        }
    }
}
собственно, наведите на путь истенный.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2012, 18:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Классы, наследование (C++):

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

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

Классы и их наследование - C++
Начал изучать С++ и ООП после того как понял немного осоновы. И вот столкнулся с чем. Есть базовый класс, есть класс-наслденик, базовый...

Классы и наследование - C++
Помогите , пожалуйста! Нужно с помощью наследования записать количество проданного товара и функцию нахождения остатка товара. !Не...

Наследование. Классы. C++ - C++
Наверное мой вопрос будет смешным, но я действительно не могу придумать методы и свойства. Я совсем запуталась что чем является, и не могу...

Классы и наследование - C++
Реализовать класс−оболочку Number для числового типа double. Реализовать методы умножения и вычитания. Создать производный класс Real, в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
John Prick
782 / 715 / 132
Регистрация: 27.07.2012
Сообщений: 2,051
Завершенные тесты: 3
22.10.2012, 19:44 #2
C++
1
class system
не называйте класс system. Есть такая функция и лишние конфликты имён вам ни к чему. Назовите хотя бы с большой буквы System или TSystem.
C++
1
class system s;
Объявление объектов класса должно выглядет так:
C++
1
system s;
без ключевого слова class.
Br8k
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 19:55  [ТС] #3
Точно а я то думал почему компилятор ругался на мой system когда я его объявлял, теперь в этом плане все сходиться.

Но к сожалению проблема актуальна, именно в момент сравнения, то что было введено и что храниться в файле! =(
John Prick
782 / 715 / 132
Регистрация: 27.07.2012
Сообщений: 2,051
Завершенные тесты: 3
22.10.2012, 20:02 #4
Цитата Сообщение от Br8k Посмотреть сообщение
Но к сожалению проблема актуальна, именно в момент сравнения, то что было введено и что храниться в файле!
Поподробнее, пжл. И с фрагментами кода, за это отвечающими.
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
22.10.2012, 20:02 #5
John Prick,
Объявление объектов класса должно выглядет так:
Неверно. Вторую форму никто не запрещал (class C c; - вполне корректное объявление).
John Prick
782 / 715 / 132
Регистрация: 27.07.2012
Сообщений: 2,051
Завершенные тесты: 3
22.10.2012, 20:05 #6
Не знал. Хотя может и знал, но забыл, ибо не применяю и не встречалось.
Век живи, век учись
Br8k
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);
        }
    }
}
вот здесь происходить сравнение, может конечно что-то не так, но не пойму, что ибо запускается, а когда доходит до сравнение щитает что введены неверные данные..
John Prick
782 / 715 / 132
Регистрация: 27.07.2012
Сообщений: 2,051
Завершенные тесты: 3
22.10.2012, 20:17 #8
Ну так вы используете новый объект s в каждой функции, а не тот, который вводили с клавиатуры.
Br8k
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 20:20  [ТС] #9
Немного не понял суть.
John Prick
782 / 715 / 132
Регистрация: 27.07.2012
Сообщений: 2,051
Завершенные тесты: 3
22.10.2012, 20:31 #10
C++
1
2
    s.set_name();   
    c.chek_name();
вводим имя в функции set_name(), как я понял. А проверяем в другом объекте, которому введённое имя недоступно. Вот я о чём.
Br8k
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 20:35  [ТС] #11
разве при наследовании "имя/пароль" недоступны?
John Prick
782 / 715 / 132
Регистрация: 27.07.2012
Сообщений: 2,051
Завершенные тесты: 3
22.10.2012, 20:43 #12
Ну а причём тут наследование? У вас вводится имя в одном объекте, а проверяется в другом.
Br8k
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 20:47  [ТС] #13
я понимаю, но почему данное имя не доступно там?
John Prick
782 / 715 / 132
Регистрация: 27.07.2012
Сообщений: 2,051
Завершенные тесты: 3
22.10.2012, 21:10 #14
Потому что всё, что классу доступно - это набор своих полей, а также открытых и защищённых полей базовых классов. Но это всё в пределах одного объекта. Другой объект - это другой объект, ему ничего не доступно от других объектов.
Br8k
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, не пойму в чем проблема...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2012, 21:18
Привет! Вот еще темы с ответами:

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

Классы и наследование - C++
Доброго времени суток. Помогите решить задание. Дан класс pegasus ,у которого родительский класс horse, надо переделать код, чтобы при...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.10.2012, 21:18
Ответ Создать тему
Опции темы

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