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

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

Восстановить пароль Регистрация
 
 
Br8k
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 18:37     Классы, наследование #1
Собственно, задача поставлена так, в файле 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++
Классы и их наследование C++
Классы и наследование C++
C++ Классы и наследование
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 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
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
22.10.2012, 20:02     Классы, наследование #4
Цитата Сообщение от Br8k Посмотреть сообщение
Но к сожалению проблема актуальна, именно в момент сравнения, то что было введено и что храниться в файле!
Поподробнее, пжл. И с фрагментами кода, за это отвечающими.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
22.10.2012, 20:02     Классы, наследование #5
John Prick,
Объявление объектов класса должно выглядет так:
Неверно. Вторую форму никто не запрещал (class C c; - вполне корректное объявление).
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 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
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
22.10.2012, 20:17     Классы, наследование #8
Ну так вы используете новый объект s в каждой функции, а не тот, который вводили с клавиатуры.
Br8k
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 20:20  [ТС]     Классы, наследование #9
Немного не понял суть.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 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
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
22.10.2012, 20:43     Классы, наследование #12
Ну а причём тут наследование? У вас вводится имя в одном объекте, а проверяется в другом.
Br8k
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 20:47  [ТС]     Классы, наследование #13
я понимаю, но почему данное имя не доступно там?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 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, не пойму в чем проблема...
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.10.2012, 21:22     Классы, наследование #16
есть две собаки. одинаковой породы (класса). обе унаследованы от класса "четвероногое животное". одной дали кость, а второй - нет. почему одна сидит и грызет, а вторая слюной давится? ведь они одного класса!?
Br8k
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 21:25  [ТС]     Классы, наследование #17
я понимаю к чему вы ведёте, но не могу этого реализовать, я иссяк почти.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.10.2012, 21:41     Классы, наследование #18
ты создал еще более интересную констелляцию: у тебя есть два объекта: один - собака (тип, унаследованный от четвероногого), и оди объект - просто четвероногое. ты четвероногому дал что-то, а забрать хочешь у собаки. дело не в том, что это объекты разных типов: ты не нарушаешь в этом плане ничего.
понимаешь, твой Cfile - это тоже Cpol, и более того. наоборот - неправда. что может Cfile, то не умеет Cpol (кроме вещей, которые первый у него унаследовал).
но это - касаемо типа объекта (т.е. собака это или просто четвероногое), а не конкретного объекта. если ты дал кость какой-то собаке, а какой-то - нет, то отобрать ее можно только у той, которой дал. НЕ ПУТАЙ ТИП ОБЪЕКТА С КОНКРЕТНЫМ ЭКЗЕМПЛЯРОМ ОБЪЕКТА ДАННОГО ТИПА!
Br8k
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2012, 22:52     Классы, наследование
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
22.10.2012, 22:52     Классы, наследование #20
C++
1
if(p.GetName()==pol[i].FGetName())
Вот для этого p вы функцию ввода имени не вызывали.
Yandex
Объявления
22.10.2012, 22:52     Классы, наследование
Ответ Создать тему
Опции темы

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