Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

22.10.2012, 18:37. Просмотров 972. Ответов 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);
        }
    }
}
собственно, наведите на путь истенный.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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, в...

26
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.10.2012, 21:22 #16
есть две собаки. одинаковой породы (класса). обе унаследованы от класса "четвероногое животное". одной дали кость, а второй - нет. почему одна сидит и грызет, а вторая слюной давится? ведь они одного класса!?
0
Br8k
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 21:25  [ТС] #17
я понимаю к чему вы ведёте, но не могу этого реализовать, я иссяк почти.
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.10.2012, 21:41 #18
ты создал еще более интересную констелляцию: у тебя есть два объекта: один - собака (тип, унаследованный от четвероногого), и оди объект - просто четвероногое. ты четвероногому дал что-то, а забрать хочешь у собаки. дело не в том, что это объекты разных типов: ты не нарушаешь в этом плане ничего.
понимаешь, твой Cfile - это тоже Cpol, и более того. наоборот - неправда. что может Cfile, то не умеет Cpol (кроме вещей, которые первый у него унаследовал).
но это - касаемо типа объекта (т.е. собака это или просто четвероногое), а не конкретного объекта. если ты дал кость какой-то собаке, а какой-то - нет, то отобрать ее можно только у той, которой дал. НЕ ПУТАЙ ТИП ОБЪЕКТА С КОНКРЕТНЫМ ЭКЗЕМПЛЯРОМ ОБЪЕКТА ДАННОГО ТИПА!
0
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
0
John Prick
803 / 736 / 145
Регистрация: 27.07.2012
Сообщений: 2,108
Завершенные тесты: 3
22.10.2012, 22:52 #20
C++
1
if(p.GetName()==pol[i].FGetName())
Вот для этого p вы функцию ввода имени не вызывали.
0
Br8k
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 22:57  [ТС] #21
Цитата Сообщение от Br8k Посмотреть сообщение
p.SetName();
вызвана в функции мейн, до:

Цитата Сообщение от Br8k Посмотреть сообщение
c.ChekName();
в которую входит
Цитата Сообщение от John Prick Посмотреть сообщение
if(p.GetName()==pol[i].FGetName())
0
John Prick
803 / 736 / 145
Регистрация: 27.07.2012
Сообщений: 2,108
Завершенные тесты: 3
22.10.2012, 23:10 #22
Вот вам словосочетание: область видимости объектов. Обязательно прочтите литературу на этот счёт.
Если вкратце, то
C++
1
p.SetName();
и
C++
1
if(p.GetName()==pol[i].FGetName())
Это разные объекты, хоть они и имеют одинаковое имя. А всё потому, что область видимости функции ChekName(); ограничена фигурными скобками и полями того объекта, функция которого вызывается.
0
Br8k
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 23:14  [ТС] #23
спасибо прочитаю, а если в крации, как это обойти?
сылка или адрес или что?
p.s. ну как вы думаю поняли проблема осталась только в сравнивании?
0
John Prick
803 / 736 / 145
Регистрация: 27.07.2012
Сообщений: 2,108
Завершенные тесты: 3
22.10.2012, 23:24 #24
Цитата Сообщение от Br8k Посмотреть сообщение
как это обойти?
Это обходить вредно для дальнейшего развития.
В вашем случае, всей вашей структуре сложно найти какое-то разумное объяснение. Всё свалено в кучу: наследование, создание объектов... Если нужен минимум изменений в существующем коде, вынесите объект p в глобальную область видимости, а из всех функций check уберите его объявление. Но по-хорошему: CTRL+A, DEL, затем хорошенько подумать и написать всё заново.
1
alkagolik
Заблокирован
22.10.2012, 23:34 #25
ой, эти ваши классы - скукотища и геморрой. И вообще этот с++ скучная и не нужная няшка.
0
Br8k
1 / 1 / 0
Регистрация: 22.10.2012
Сообщений: 42
22.10.2012, 23:40  [ТС] #26
понял, лучше не стоить, почитаю литературу. спасибо.
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
24.10.2012, 16:44 #27
Цитата Сообщение от Br8k Посмотреть сообщение
понял, лучше не стоить, почитаю литературу. спасибо.
лучше почитай еще раз свое задание, и попробуй сформулировать четко "ответственность" каждого из твоих классов. зачем ты их такими создал. я не вполне понял, а то, что понял - не считаю что хорошо.
я бы посоветовал:
- классы назвать как-нибудь так, чтобы "коню было понятно", что он должен уметь делать.
- не заставлять классы что-нибудь вводить то ли из файла, то ли с клавиатуры. сделай это или в основном модуле, или создай класс специально для того, чтобы что-нибудь вводить.
- не применяй наследование там, где оно неуместно (т.е. сущности, которые эти классы представляют, пусть абстрактные, но должны быть тоже каким-то образом один подвидом другого)
0
24.10.2012, 16:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2012, 16:44
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

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