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

Как работать с функциями , используя классы ? - C++

Восстановить пароль Регистрация
 
Anastasia777
1 / 1 / 0
Регистрация: 23.09.2012
Сообщений: 59
28.10.2012, 14:00     Как работать с функциями , используя классы ? #1
Здравствуйте! Очень нужна Ваша помощь . Помогите пожалуйста хоть немного разобраться с классами в с++. Как работать с функциями , используя классы ? Приведите пожалуйста какой-то пример . Заранее огромное спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2012, 14:00     Как работать с функциями , используя классы ?
Посмотрите здесь:

Как работать с пользовательскими полями в документах OpenOffice.org Writer, используя С++? C++
C++ Как бы переписать программу используя динамичские классы?
C++ Создать абстрактный класс с виртуальной функцией вычисления нормы и модуля; определить производные классы с собственными функциями
C++ Изменить код используя классы
C++ Используя классы, найти сумму всех элементов массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Casper-SC
 Аватар для Casper-SC
3465 / 1684 / 173
Регистрация: 27.03.2010
Сообщений: 4,824
Записей в блоге: 1
28.10.2012, 14:08     Как работать с функциями , используя классы ? #2
Cat.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
#pragma once
 
namespace UserClasses
{
    class Cat
    {
    private:
        unsigned int age;
        unsigned int weight;
 
    public:
        Cat(void);
        Cat(unsigned int age, unsigned int weight);
        ~Cat(void);
 
        unsigned int getAge() const;
        void setAge(unsigned int newAge);
 
        unsigned int getWeight() const;
        void setWeight(unsigned int newWeight);
 
        void Meow();
    };
}

Cat.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
#include "StdAfx.h"
#include "Cat.h"
 
namespace UserClasses
{
    Cat::Cat(void)
    {
        age = 0;
        weight = 0;
    }
 
    Cat::Cat(unsigned int Age, unsigned int Weight)
    {
        age = Age;
        weight = Weight;
    }
 
    Cat::~Cat(void)
    {
    }
 
    unsigned int Cat::getAge() const //const означает, что метод не может изменять значения класса
    {
        return age;
    }
 
    void Cat::setAge(unsigned int newAge)
    {
        age = newAge;
    }
 
    unsigned int Cat::getWeight() const
    {
        return weight;
    }
 
    void Cat::setWeight(unsigned int newWeight)
    {
        weight = newWeight;
    }
 
    void Cat::Meow()
    {
// отсюда вызывать вывод на консоль не правильно, это просто пример,
// лучше возвращать текст, если на то пошло
        std::cout << "Мяу" << std::endl; 
    }
}


Stack.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
 
namespace System
{
    namespace Collections
    {
        class Stack
        {
        public:
            Stack(void);
            Stack(unsigned int startSize);
            ~Stack(void);
            void Push(char ch); //помещает в стек символ
            char Pop();         //выталкивает из стека символ
            int GetSize();
        };
    }
}

Stack.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
#include "StdAfx.h"
#include "Stack.h"
 
using namespace std;
using namespace System::Collections;
 
const int START_STACK_SIZE = 6;
char * _stack; //содержит стэк
int _currentPosition; //индекс вершины стека
int _length;
 
Stack::Stack(void)
{
    _currentPosition = 0;
    _stack = new char[START_STACK_SIZE];
    _length = START_STACK_SIZE;
}
 
Stack::Stack(unsigned int startSize)
{
    _currentPosition = 0;
    _stack = new char[startSize];
    _length = startSize;
}
 
Stack::~Stack(void)
{
    delete _stack;
}
 
void Stack::Push(char ch)
{
    if (_currentPosition == _length)
    {
        _length = _length * 2;
        char * tempArr = new char[_length];
        for (int i = 0; i < _length; i++)
            tempArr[i] = _stack[i];
        delete _stack;
        _stack = tempArr;
    }
 
    _stack[_currentPosition++] = ch;
}
 
char Stack::Pop()
{
    if (_currentPosition == 0)
        return 0;
 
    return _stack[--_currentPosition];
}
 
int Stack::GetSize()
{
    return _currentPosition;
}


Может как-то так? Заодно раскритикуйте мой стек .
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
28.10.2012, 14:15     Как работать с функциями , используя классы ? #3
Casper-SC, по-моему, это сложновато для объяснения взаимодействия функций и классов)

Вот простой пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
 
class someclass
{
 public:
  int i;
  void print();
};
 
void someclass::print()
{
 std::cout<<i<<std::endl;
}
 
int main()
{
 someclass obj;
 obj.i=3;
 obj.print();  
 system("PAUSE");
 return 0;
}
Когда функция определена в классе.
soon
28.10.2012, 14:16
  #4

Не по теме:

Цитата Сообщение от Casper-SC Посмотреть сообщение
Заодно раскритикуйте мой стек
Черт возьми, переменные не просто в свободном доступе, они даже вне класса!

Casper-SC
 Аватар для Casper-SC
3465 / 1684 / 173
Регистрация: 27.03.2010
Сообщений: 4,824
Записей в блоге: 1
28.10.2012, 14:23     Как работать с функциями , используя классы ? #5
Цитата Сообщение от BumerangSP Посмотреть сообщение
Casper-SC, по-моему, это сложновато для объяснения взаимодействия функций и классов)
Да я просто не успел выложить то, как оно работает в программе:
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
// TestProjectC_plus_plus.cpp: определяет точку входа для консольного приложения.
//
//
#include "stdafx.h"
#include <windows.h>
#include "Cat.h"
#include "Stack.h"
 
using namespace System;
using namespace System::Collections;
 
typedef unsigned short ushort; //Создали псевдоним "ushort" для типа "unsigned short"
 
void WriteLine(const char* text);
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    Cat cat(3, 5);
    cat.Meow();
    std::cout << "Возраст кошки: " << cat.getAge() << "\nВес кошки: " << cat.getWeight() << std::endl;
    Cat *pCat = &cat;
 
    std::cout << "Первый кот: " << pCat->getAge() << std::endl;
 
    Cat *cat2;
    cat2 = new Cat(7, 4);
    std::cout << "Возраст кошки: " << cat2->getAge() << "\nВес кошки: " << cat2->getWeight() << std::endl;
    delete cat2;
    cat2 = nullptr;
 
    std::cout << "Заполняем стек:\n";
    Stack *stackOne = new Stack(8);
    stackOne->Push('-');
    stackOne->Push('т');
    std::cout << "Размер стека после добавления двух элементов: " << stackOne->GetSize() << std::endl;
    stackOne->Push('е');
    stackOne->Push('в');
    stackOne->Push('и');
    stackOne->Push('р');
    stackOne->Push('П');
    stackOne->Push('-');
    std::cout << "Размер стека после заполнения: " << stackOne->GetSize() << std::endl;
    //cout << endl;
 
    WriteLine("Выводим содержимое стека:");
    for (int i = 0; i < 8; i++)
        std::cout << "символ из stackOne:" << stackOne->Pop() << "\n";
 
    std::cout << "Размер стека после вывода из него значений: " << stackOne->GetSize() << std::endl;
    delete stackOne;
    stackOne = nullptr;
 
    system("pause");
    return EXIT_SUCCESS;
}
 
void WriteLine(const char* text)
{
    std::cout << text << "\n";
}
Да и я сам в С++ пока не особо разбираюсь, просто на этот вопрос вроде как могу ответить .

Добавлено через 4 минуты

Не по теме:

Цитата Сообщение от soon Посмотреть сообщение
Черт возьми, переменные не просто в свободном доступе, они даже вне класса!
Упс! Я думал тут как в С# примерно . Все переменные надо поместить в заголовочный файл, чтобы были в классе?

soon
28.10.2012, 14:26
  #6

Не по теме:

Цитата Сообщение от Casper-SC Посмотреть сообщение
Все переменные надо поместить в заголовочный файл, чтобы были в классе?
Не просто в в заголовочный, а непосредственно в класс.

Цитата Сообщение от Casper-SC Посмотреть сообщение
Я думал тут как в С# примерно
Што за бардак в C# творится?!

Casper-SC
 Аватар для Casper-SC
3465 / 1684 / 173
Регистрация: 27.03.2010
Сообщений: 4,824
Записей в блоге: 1
28.10.2012, 14:41     Как работать с функциями , используя классы ? #7
Всё, исправил. Вот:

Stack.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
#pragma once
 
namespace System
{
    namespace Collections
    {
        class Stack
        {
        private:
            static const int START_STACK_SIZE = 6;
            char * _stack; //содержит стэк
            int _currentPosition; //индекс вершины стека
            int _length;
        public:
            Stack(void);
            Stack(unsigned int startSize);
            ~Stack(void);
            void Push(char ch); //помещает в стек символ
            char Pop();         //выталкивает из стека символ
            int GetSize();
        };
    }
}


Stack.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
#include "StdAfx.h"
#include "Stack.h"
 
using namespace std;
using namespace System::Collections;
 
Stack::Stack(void)
{
    _currentPosition = 0;
    _stack = new char[START_STACK_SIZE];
    _length = START_STACK_SIZE;
}
 
Stack::Stack(unsigned int startSize)
{
    _currentPosition = 0;
    _stack = new char[startSize];
    _length = startSize;
}
 
Stack::~Stack(void)
{
    delete _stack;
}
 
void Stack::Push(char ch)
{
    if (_currentPosition == _length)
    {
        _length = _length * 2;
        char * tempArr = new char[_length];
        for (int i = 0; i < _length; i++)
            tempArr[i] = _stack[i];
        delete _stack;
        _stack = tempArr;
    }
 
    _stack[_currentPosition++] = ch;
}
 
char Stack::Pop()
{
    if (_currentPosition == 0)
        return 0;
 
    return _stack[--_currentPosition];
}
 
int Stack::GetSize()
{
    return _currentPosition;
}


Не по теме:

Цитата Сообщение от soon Посмотреть сообщение
Што за бардак в C# творится?!
Что-то я думаю, что я не то вообще сказал . Там просто нельзя по другому, кроме как классами писать. Я имел ввиду, что я думал, что в файле Stack.cpp всё его содержимое относится к классу Stack

В С# было бы примерно так:


С# код
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
using System;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Заполняем стек:");
            Stack stackOne = new Stack(8);
            stackOne.Push('-');
            stackOne.Push('т');
            Console.WriteLine("Размер стека после добавления двух элементов: {0}", stackOne.GetSize());
            stackOne.Push('е');
            stackOne.Push('в');
            stackOne.Push('и');
            stackOne.Push('р');
            stackOne.Push('П');
            stackOne.Push('-');
            Console.WriteLine("Размер стека после заполнения: {0}", stackOne.GetSize());
            Console.WriteLine("Выводим содержимое стека:");
            for (int i = 0; i < 8; i++)
                Console.WriteLine("символ из stackOne: {0}", stackOne.Pop());
 
            Console.ReadKey();
        }
    }
}
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
namespace ConsoleApplication1
{
    public class Stack
    {
        private const int START_STACK_SIZE = 6;
        private char[] _stack; //содержит стэк
        private int _currentPosition; //индекс вершины стека
        private uint _length;
 
        public Stack()
        {
            _currentPosition = 0;
            _stack = new char[START_STACK_SIZE];
            _length = START_STACK_SIZE;
        }
 
        public Stack(uint startSize)
        {
            _currentPosition = 0;
            _stack = new char[startSize];
            _length = startSize;
        }
 
        public void Push(char ch)
        {
            if (_currentPosition == _length)
            {
                _length = _length * 2;
                char[] tempArr = new char[_length];
                for (int i = 0; i < _length; i++)
                    tempArr[i] = _stack[i];
                _stack = tempArr;
            }
 
            _stack[_currentPosition++] = ch;
        }
 
        public char Pop()
        {
            if (_currentPosition == 0)
                return ' ';
 
            return _stack[--_currentPosition];
        }
 
        public uint GetSize()
        {
            return _length;
        }
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2012, 14:58     Как работать с функциями , используя классы ?
Еще ссылки по теме:

C++ Вычислить значение выражения, используя классы
C++ Используя классы создать символьный стек
Перевод в бинарный код, используя классы C++

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

Или воспользуйтесь поиском по форуму:
Kastaneda
28.10.2012, 14:58     Как работать с функциями , используя классы ?
  #8

Не по теме:

Цитата Сообщение от soon Посмотреть сообщение
Што за бардак в C# творится?!
Это ты еще ООП в MathCAD не видел (или MathLab, уже не помню, в ВУЗе курс был). Там для класса нужно создать папку privete, и положить туда файл с приватными членами. Точно так же нужно создать папку public. Точно особенностей не помню, но суть в этом
А так да, странно как то

Yandex
Объявления
28.10.2012, 14:58     Как работать с функциями , используя классы ?
Ответ Создать тему
Опции темы

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