Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/163: Рейтинг темы: голосов - 163, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 06.10.2015
Сообщений: 8

Как создать свой класс и подключить его в main?

03.11.2015, 01:35. Показов 34046. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
я новичок,хотел поинтересоваться,когда люди пишут программу,они сначала главную функцию main пишут,а потом пишут классы и подключают к main через #include? Просто создавал простенький класс в Visual studio 2015 по книжке,который просто на консоль выводит,и пошли проблемы,то написано что мой класс.h не найден,или то что нужны явные указатели какие-то.Просто интересно,как это правильно делать.Заранее спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.11.2015, 01:35
Ответы с готовыми решениями:

Как подключить свой класс?
Есть основной файл с тремя кнопками который выполняет функции при нажатии. Эти функции описаны в отдельном классе .Как его подключить в...

Как к проекту подключить свой класс
Здравствуйте. Объясните мне не учёному, как в Windows Forms к проекту подключить свой класс. Уже столько пересмотрел, а вменяемого не...

Как подключить свой класс к своему проекту WindowsFormsApplication?
Здравствуйте, уважаемые форумчане. Проблема такая. Сконструирована форма с кнопками и прочими элементами. Она нужна только для того,...

23
Wanna be serious
 Аватар для Bespridelschic
587 / 474 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
03.11.2015, 04:04
andrue_selen, Если не секрет, какую литературу используете? Обычно в книгах для начинающих классы даются после прохождения базисных тем, в которых идёт толкование тех самых
Цитата Сообщение от andrue_selen Посмотреть сообщение
явные указатели какие-то.
Если вам так интересно, то вот реализация простейшего класса:
Файл Source.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>
#include "Man.h"
 
int main() {
    Man man = Man("No name", 0, 0.0);
    man.Input_data();
    man.Show_data();
    system("Pause");
    return 0;
}
Файл Man.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
#include <iostream>
#include <string>
#include "Man.h"
 
Man::Man(std::string _Name, int _age, double _height) {
    Name = _Name;
    age = _age;
    height = _height;
}
 
void Man::Input_data() {
    std::cout << "Enter name: ";
    std::cin >> Name;
    std::cout << "Enter age of man: ";
    std::cin >> age;
    std::cout << "Enter height: ";
    std::cin >> height;
}
 
void Man::Show_data() {
    std::cout
        << "\nName: " << Name
        << "\nAge: " << age
        << "\nHeight: " << height
        << "\n";
}
Файл Man.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
#ifndef MAN_H_
#define MAN_H_
#include <string>
 
class Man {
// Скрытые поля
private:
    std::string Name;
    int age;
    double height;
// Здесь располагаются функции-методы работы с данными
public:
    Man(std::string _Name, int _age, double _height);
    ~Man() {}
    void Input_data();
    void Show_data();
};
 
#endif
3
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
03.11.2015, 10:36
Цитата Сообщение от Bespridelschic Посмотреть сообщение
Скрытые поля
Нет такого. Есть данные-члены (data members), которые некоторые называют также "полями класса" (class fields).
Цитата Сообщение от Bespridelschic Посмотреть сообщение
функции-методы
Нет такого. Есть функции-члены (function members), которые некоторые называют также "методами класса" (class methods).

Соответственно, в зависимости от доступа, члены класса могут быть закрытыми (private members) или открытыми (public members).
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
03.11.2015, 11:47
Цитата Сообщение от gru74ik Посмотреть сообщение
закрытыми (private members) или открытыми (public members).
Или защищенными (protected)
Цитата Сообщение от Bespridelschic Посмотреть сообщение
C++
1
2
3
#pragma once 
#ifndef MAN_H_ 
#define MAN_H_
А вдруг?
5
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
03.11.2015, 11:49
Цитата Сообщение от Tulosba Посмотреть сообщение
Или защищенными (protected)
Или защищенными, да. Благодарю за уточнение.
1
Wanna be serious
 Аватар для Bespridelschic
587 / 474 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
03.11.2015, 12:49
Цитата Сообщение от gru74ik Посмотреть сообщение
Нет такого. Есть данные-члены (data members), которые некоторые называют также "полями класса" (class fields).
Я имел ввиду поля класса, скрытые от пользователя.
Цитата Сообщение от gru74ik Посмотреть сообщение
Нет такого. Есть функции-члены (function members), которые некоторые называют также "методами класса" (class methods).
Тут я имел ввиду, функции, позволяющие работать с полями.
Цитата Сообщение от Tulosba Посмотреть сообщение
А вдруг?
Читал по поводу использованию #pragma once и #ifndef / #endif вместе, на сколько я понял ничего плохого в принципе быть не может

P.S. По поводу терминологии обещаю подтянуться
1
0 / 0 / 0
Регистрация: 06.10.2015
Сообщений: 8
03.11.2015, 18:28  [ТС]
Дейтел,программирование на С++.Там есть небольшое введение в классы в главе 3
0
5 / 5 / 3
Регистрация: 03.11.2015
Сообщений: 30
03.11.2015, 21:27
Вот еще рабочий пример, корявый, но рабочий в VS2008
исполняемый matrik.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
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
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include "time.h"
#include <string>
#include <conio.h>
using namespace std;
 
 
class matrik //создаем  класс с помощью ключевого слова class и имени Name_class
{
    public: // это спецификатор класс, он позволяет видеть все что идет после его
    int mas[50][50], mas2[50][50],sum[50][50],pro[50][50];
    int n,m,a,s;
    void set() //функция ввода кол-ва строк и столбцов
    {
        cout<<endl<<"Введите количество строк"<<endl;
        cin>>n;
        cout<<endl<<"Введите количество столбцов"<<endl;
        cin>>m;
        cout<<endl;
        }
 
    void get()     // функция заполнения и вывода матрицы
    {
    for (int i = 0; i < n; i++) {
     for (int j = 0; j < m; j++) {
      mas[i][j]=rand()%10+1;
     }
    }
    for (int i = 0; i < n; i++) {
      cout<<endl;
      for (int j = 0; j < m; j++) {
      cout<<mas[i][j]<<ends;
      }
    }
    }
    void get2()     // функция заполнения и вывода матрицы 2
    {
    for (int i = 0; i < n; i++) {
     for (int j = 0; j < m; j++) {
      mas2[i][j]=rand()%10+2;
     }
    }
    for (int i = 0; i < n; i++) {
      cout<<endl;
      for (int j = 0; j < m; j++) {
      cout<<mas2[i][j]<<ends;
      }
    }
    }
/*   void poisk() // функция поиска по индексу
    {
    cout<<endl<<"Введите номер элемента по строке"<<endl;
        cin>>a;
        cout<<endl<<"Введите номер элемента по столбцу"<<endl;
        cin>>s;
        cout<<endl;
      for (int i = 0; i < n; i++) {
     for (int j = 0; j < m; j++) {
      if (((a-1)==i)&&((s-1)==j)) {
      cout<<"Выбранный элемент "<<mas2[i][j]<<endl;
      }
 
     }
    }
    }*/
    
    void summ() // функция сложения матриц
    {
        cout<<endl<<"Результат сложения матриц: "<<endl;
    for (int i = 0; i < n; i++) {
     for (int j = 0; j < m; j++) {
      sum[i][j]=mas[i][j]+mas2[i][j];
     }
    }
    for (int i = 0; i < n; i++) {
      cout<<endl;
      for (int j = 0; j < m; j++) {
      cout<<sum[i][j]<<ends;
      }}
    }
    void prois() // функция произведения матриц
    {
        cout<<endl<<"Результат умножения матриц: "<<endl;
    for (int i = 0; i < n; i++) {
     for (int j = 0; j < m; j++) {
      pro[i][j]=mas[i][j]*mas2[i][j];
     }
    }
    for (int i = 0; i < n; i++) {
      cout<<endl;
      for (int j = 0; j < m; j++) {
      cout<<pro[i][j]<<ends;
      }}
    }
};

основной Laba2

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
// Laba2.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include "time.h"
#include <string>
#include <conio.h>
#include "matrik.h"
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{   matrik m; // создание объекта класса, это обязательно
setlocale(LC_ALL,"Russian");
srand((unsigned)time(NULL));
int c, b;
m.set();
cout<<endl;
menu:
//system("cls");
cout<<endl<<"1. Вывести первую матрицу: "<<endl;
cout<<endl<<"2. Вывести вторую матрицу: "<<endl;
cout<<endl<<"3. Вывести результат сложения матриц: "<<endl;
cout<<endl<<"4. Вывести результат произведения матриц: "<<endl;
cout<<endl<<"0. Выход: "<<endl;
                        cin>>c;
                        if (c==1){
                            goto masss1;
                        } 
                        else {
                                if (c==2){
                                    goto masss2;
                                }
                                else {
                                    if (c==3){
                                        goto sssum;
                                    }
                                    else {
                                        if (c==4) {
                                            goto sam;
                                        }
                                        else {
                                            if (c==0) {
                                                goto end;
                                            }
                                            else {
                                                cout<<endl<<"Ошибка ввода, повторите ввод "<<endl;
                                                goto menu;
                                            }}}}}
 
 
masss1:                     
m.get();
cout<<endl;
goto menu;
 
masss2:
m.get2();
cout<<endl;
goto menu;
 
sssum:
m.summ();
cout<<endl;
goto menu;
 
sam:
m.prois();
cout<<endl;
goto menu;
 
end:
 //getch();
    return 0;
}
Еще раз прошу просить за корявость и goto
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
03.11.2015, 21:34
andrue_selen, Файл-то подключить получилось или все еще не выходит?
1
0 / 0 / 0
Регистрация: 06.10.2015
Сообщений: 8
03.11.2015, 21:43  [ТС]
спасибо,все получилось,в #include надо было класс не в <> писать а в " "

Добавлено через 3 минуты
Bespridelschic, Конечно интересно,спасибо,начинаю въезжать))
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
03.11.2015, 21:53
Цитата Сообщение от gru74ik Посмотреть сообщение
class fields
нету такого в стандрате) слово fields пошло от "неверных" сишарперов).
Цитата Сообщение от gru74ik Посмотреть сообщение
Есть функции-члены (function members)
И такого на 56% уверен, что нету. Так как class methods отвечает за это понятие) И следовательно можно сказать
class methods == function members , в чём я собственно не уверен)))

Добавлено через 1 минуту
Цитата Сообщение от andrue_selen Посмотреть сообщение
в #include надо было класс не в <> писать а в " "
<> ищёт у себя в библиотеках (я про С++ компилятор)
"" ищет в папке(-ах) отмеченых как "Includes Directories"
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
03.11.2015, 21:53
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Есть функции-члены (function members)
Из стандарта вырезка
C++
1
2
3
4
5
X obj;
// ...
obj.*pmi = 7; // assign 7 to an integer
// member of obj
(obj.*pmf)(7); // call a function member of obj
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
03.11.2015, 21:57
del

Добавлено через 2 минуты
Цитата Сообщение от daslex Посмотреть сообщение
Из стандарта вырезка
56% не спроста - из-за толкования равенства двух выражений как одно и тоже. Я за 56% что это не одно и тоже. Написал же ж. Почему не читаем? *грустный_смайлик*
1
0 / 0 / 0
Регистрация: 06.10.2015
Сообщений: 8
03.11.2015, 21:59  [ТС]
rikimaru2013, да,я уже прочитал,спасибо)
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
03.11.2015, 22:04
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
нету такого в стандрате) слово fields пошло от "неверных" сишарперов).
А это что?
Thus, the valarray template is neither a matrix class nor a field class
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
03.11.2015, 22:13
напоминает игру "найди самое редкое слово в стандарте" )
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
03.11.2015, 22:20
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
"найди самое редкое слово в стандарте" )


Ну, справедливости ради, я, короче, искал, искал что это за поле-то такое, но так и не нашел.
англ. не очень..
просто оно там, такое понятие, встречается.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
03.11.2015, 22:49
rikimaru2013, в C++ общепринятые термины данные-члены (data members) и функции-члены (function members) - оба термина имеются и в стандарте и в книгах Страуструпа.

Говорить поля класса вместо данные-члены и методы класса вместо функции-члены с точки зрения строгости терминологии, действительно, неверно. Пуристы откладывают тонны кирпичей, когда в очередной раз сталкиваются с "вопиющим нарушением канонов". Таких терминов, действительно, изначально не было в С++, они заимствованы из других языков программирования (Java, C# и т.п.). Но реальность такова, что 80% народу употребляет оба варианта и адекватные люди не парятся на этот счёт. Более того, заимствованная терминология в качестве синонимов устоявшихся терминов уже употребляется и в учебной литературе (Макконнелл, Эккель, Прата), а не только в неформальном общении программистов.
2
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
03.11.2015, 22:54
gru74ik, я просто ненавижу C#-еров. Когда проливаешь седьмой пот от подводных камней языка, а эти т*ари еще на этапе компиляции решают 80% проблем. *слезливый_смайлик*
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
03.11.2015, 22:59
rikimaru2013, бывают граммар-наци, а ты C++наци
Миниатюры
Как создать свой класс и подключить его в main?  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.11.2015, 22:59
Помогаю со студенческими работами здесь

как создать свой класс, в Делфи?
как создать свой класс, в Делфи? а потом вызвать, например при открытии? begin if pnl1.Color=clRed then //питание on begin ...

Как создать свой Toolbox, точнее на подобии его?
Здравствуйте. Скажите пожалуйста, как создать свой Toolbox, точнее на подобии его? Не пойму как он правильно называется, чтобы найти...

Как создать свой поток и связать его с консолью
Собственно возник такой вопрос: читаю Саттера пробую создать свой класс символов не чувствительный к регистру. Автор пишет, что для вывода...

Как создать свой тип файлов и ассоциировать его со своим приложением
Например, AutoCAD .dwg и т.п. Заранее спасибо)

Как создать DLL на С++, чтобы его можно было подключить к VBA?
Нужно, чтобы можно было создавать в VBA объекты классов, которые описаны в C++. Как подключить к VBA библиотеку с функциями,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru