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

Как правильно вызывать функцию объекта из другой функции того же объекта? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Из односвязного списка двухсвязный http://www.cyberforum.ru/cpp-beginners/thread400818.html
Есть Класс который имеет интерфейс АТД который включает методы для добавления, удаления, поиска элементов в соответствии с логикой работы структуры данных. Здесь структура Данных - циклический односвязный список Мне нужна реализовать двусвязный список с теми же методами. Как это сделать? class Clist { private: struct listitem {
C++ часто встречаемое слово В входном файле нужно найти одно или несколько наиболее часто встречаемых слова. программа довольно часто встречается, может у кого есть исходник? http://www.cyberforum.ru/cpp-beginners/thread400816.html
Как усовершенствовать программу? C++
Доброго времени суток! Начал изучать с++,написал простенькую прогу чтобы попрактиковаться,хотелось бы узнать как можно ещё более усовершенствовать прогу или усложнить немного? Программа вычисляет максимальное и минимальное число,причём пользователь может выбирать сколько чисел он хочет сравнить и показывает какие числа он вводил. #include<iostream.h> #include<conio.h>
C++ Ввод функций с клавиатуры...
:wall:Как можно в С/С++ вводить функцию с клавиатуры и потом что бы можно было считать значение с этой функцией.....Например функция y=sin(x)*cos(x) y=...наша функция с клавиатуры Благодарен всем кто откликнется.........:)
C++ Чтение чисел из файла, содержащего концевые пробелы и переносы строк. http://www.cyberforum.ru/cpp-beginners/thread400802.html
Здравствуйте! Помогите, пожалуйста, разобраться со следующей задачей. В текстовом файле содержатся целые числа, разделенные произвольным количеством пробелов и переносов строк. Нужно эти числа из файла занести в стек. Написал такой код: CStack stck; int n; FILE * fRead; fRead = fopen("e:\\test.txt","rt");
C++ Преобразование типов. Дружественные функции Создать класс комплексных чисел. Определить перегруженную функцию, возвращающую максимальный из двух аргументов. Функция не является членом класса комплексных чисел. Перегруженные функции имеют аргументы типа int, double, complex. Тело перегруженных функций должны быть одинаковыми. Создать два класса вектор (float *) и матрица (float **). Определить конструкторы - по умолчанию, с параметром, для... подробнее

Показать сообщение отдельно
Negent
9 / 9 / 1
Регистрация: 01.11.2011
Сообщений: 21
07.12.2011, 04:29  [ТС]     Как правильно вызывать функцию объекта из другой функции того же объекта?
Цитата Сообщение от Bers Посмотреть сообщение
Это разрешение контекста. Вещь хорошая.
Но в вашем случае можно писать попроще и покороче:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class ClassName
        {
        public:
                ClassName ();
                void authentication (); //Функция проведения аутентификации
                void setData (); //Функция установки значений
                void getData (); //Функция получения и вычисления значений
        private:
                string nameOfUser; //Имя владельца счёта
        int accountNumber; //Номер счёта
        int initialBalance; //Начальный баланс (денег на счету)
        int sumIncome; //Количество входящих платежей
        int sumExpense; //Количество исходящих платежей
                int currentBalance; //Настоящий (текущий) баланс
                int creditLimit; //Размер максимального кредита, при нулевом балансе на счету
                int maximumSum; //Размер максимального кредита, при текущем балансе на счету
        };
Первое. Проверил - программа работает без операции разрешения контекста. Здорово! Огромное спасибо!
Второе. Если пересоздать программу в пустом проекте - всё работает. Отлично!

Проблема решена. Всем спасибо!

Добавлено через 46 минут
Хочется привести полный текст программы с исправленными недостатками и замечаниями.
После отладки, программа приобрела новые качества, в том числе, укорачивать вводимое имя.

Точка входа, файл "Bankomat_2.cpp":
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Bankomat_2.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "BankClass.h"
 
#include <iostream>
#include <iomanip>
 
#include <string>
 
using namespace std;
 
void main ()
{
    cout<<"Hello, programmer!\n";
    ClassName ClassObject;
    ClassObject.authentication ();
    ClassObject.authentication ();
    cout<<"Done!\n";
    system ("pause");
}
Заголовочный файл "BankClass.h" объекта:
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
#include "stdafx.h"
 
#include <iostream>
#include <iomanip>
 
#include <string>
 
using namespace std;
 
class ClassName
    {
    public:
        ClassName::ClassName ();
        void ClassName::authentication ();
        void ClassName::setData (); //Функция установки значений
        void ClassName::getData (); //Функция получения и вычисления значений
    private:
        string ClassName::nameOfUser; //Имя пользователя
                int ClassName::accountNumber; //Номер счёта
                int ClassName::initialBalance; //Начальный баланс (денег на счету)
                int ClassName::sumIncome; //Количество входящих платежей
                int ClassName::sumExpense; //Количество исходящих платежей
        int ClassName::currentBalance; //Настоящий (текущий) баланс
        int ClassName::creditLimit; //Размер максимального кредита, при нулевом балансе на счету
        int ClassName::maximumSum; //Размер максимального кредита, при текущем балансе на счету
    };
Файл "BankClass.cpp" с функциями объекта:
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
#include "stdafx.h"
#include "BankClass.h"
 
#include <iostream>
#include <iomanip>
 
#include <string>
 
using namespace std;
 
    ClassName::ClassName ()
        {
            nameOfUser = "anonymous";
            accountNumber = 0000;
            initialBalance = 0;
            sumIncome = 0;
            sumExpense = 0;
            currentBalance = 0;
            creditLimit = 100;
            maximumSum = 0;
        }
    void ClassName::authentication ()
        {
            int tempPass;
            int password = 1234; //Пароль для редактирования данных
            int pin = 4321; //Пароль для вывода данных и результатов
            cout<<"Procedure authentication!\n"
                <<"Please enter password ("<<pin<<"): ";
            cin>>tempPass;
            if (tempPass == password)
                {
                    cout<<"You can enter information"<<endl;
                    ClassName::setData ();
                }
            else if (tempPass == pin)
                {
                    cout<<"You can get information"<<endl;
                    ClassName::getData ();
                }
            else
                {
                    cout<<"Sorry, you not passed authentication\n"
                        <<"Please, run program again!"<<endl;
                };
        }
    void ClassName::setData ()
        {
            cout<<"Name of user: ?\b";
            cin.get (); //Для извлечения разделителя новой строки - иначе, getline не считает вводимое имя
            getline (cin,nameOfUser);
            if (nameOfUser.length () > 20) 
            {
                cout<<"Too long!\n"<<"Cut from 20-symbol\n";
                nameOfUser = nameOfUser.substr (0, 20); //Обрезаем имя пользователя до 20 символов
                cout<<"New name: "<<nameOfUser<<endl;
            }
            cout<<"Number of account: ?\b";
            cin>>accountNumber;
            cout<<"Initial balance: ?\b";
            cin>>initialBalance;
            cout<<"Income sum: ?\b";
            cin>>sumIncome;
            cout<<"Expense sum: ?\b";
            cin>>sumExpense;
        }
    void ClassName::getData ()
        {
            cout<<"Name of user: "<<nameOfUser<<endl;
            cout<<"Number of account: "<<accountNumber<<endl;
            cout<<"Initial balance: "<<initialBalance<<endl;
            cout<<"Income sum: "<<sumIncome<<endl;
            cout<<"Expense sum: "<<sumExpense<<endl;
            currentBalance = initialBalance + sumIncome - sumExpense;
            cout<<"Current balance: "<<currentBalance<<endl;
            maximumSum = currentBalance + creditLimit;
            cout<<"Maximum sum: "<<maximumSum<<endl;
        }
Эти тексты приведены на случай, если кто-то воспользуется поиском по интернету для решения задач из Дейтела.
P. S. Процедуру разрешения контекста я оставил. Дейтелы её дают - профессорам виднее.
 
Текущее время: 11:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru