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

Вывод имени класса

15.12.2022, 10:48. Показов 679. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Подскажите, пожалуйста: Допустим, у нас есть родительский класс Class_Parent. А также если два дочерних класса: Class_Child и Class_Baby, которые оба наследуют класс Class_Parent

В классе Class_Parent есть статическое поле "Имя класса", а также метод "Вывести имя класса" (как должен выглядеть этот метод?)

А дочерние классы наследуют этот метод и должны с его помощью выводить свои имена класса (Class_Child и Class_Baby соответственно)

Подскажите, как это можно сделать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.12.2022, 10:48
Ответы с готовыми решениями:

Вывод фунции класса , исходя из имени переменной
У меня есть класс и три переменных. На вход - имя любой переменной . К примеру - х. Можно ли исходя из имени переменной или из id вызвать...

Реализация поиска нужного имени в файле и вывод данных, относящихся к этому имени
Доброго времени суток всем! Прошу помощи у более компитентных людей нежели я. Полное задание выглядит так: Разработать программу,...

Вывод на экран имени переменной(имени файла, и тд.)
Здрасти. Недалече столкнулся с проблемой: надо сравнить два файла по признаку количества содержащихся в них символов и вернуть тот что...

16
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
15.12.2022, 11:22
Тебе же сказано, что сделать. Добавляй поле это и функции.
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
15.12.2022, 11:43  [ТС]
nmcf, Я обожаю первые ответы на этом форуме. Я же написал, что не знаю, как написать эту функцию. Ваш ответ мне нисколько не помог
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
15.12.2022, 11:46
Цитата Сообщение от Fershtein Посмотреть сообщение
Я же написал, что не знаю, как написать эту функцию
Ты хоть что-то знаешь? Класс вообще создал? Там есть уже поля и функции? Ну вот и добавляй по аналогии.
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
15.12.2022, 12:20  [ТС]
nmcf, Господи, Вы можете просто предложить хороший вариант написания функции для вывода имени класса?
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
15.12.2022, 12:34
Цитата Сообщение от Fershtein Посмотреть сообщение
Вы можете просто предложить хороший вариант написания функции для вывода имени класса?
Я! Я могу!!

C++
1
2
3
4
std::string GetClassName() const
{
    return m_ClassName;
}
1
Заблокирован
15.12.2022, 12:38
Цитата Сообщение от Fershtein Посмотреть сообщение
Ваш ответ мне нисколько не помог
Тут только книжки помогут, ну или частные уроки.

Цитата Сообщение от Fershtein Посмотреть сообщение
Подскажите, как это можно сделать?
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
#include <iostream>
#include <string>
using namespace std;
struct Base{
   inline static const string Name = "Base";
   virtual const string& type_name() const{ return Name; };
};
struct B : public Base{
   inline static const string Name = "B";
   virtual const string& type_name() const{ return Name; };
};
struct A : public Base{
   inline static const string Name = "A";
   virtual const string& type_name() const{ return Name; };
};
ostream& operator<<(ostream& out, const Base& who){
    return out << who.type_name() << endl;
}
int main()
{
    Base z;
    A a; B b;
    
    cout << "I am : " << z;
    cout << "I am : " << a;
    cout << "I am : " << b;
}
Добавлено через 43 секунды
Цитата Сообщение от Fershtein Посмотреть сообщение
написания функции для вывода имени класса?
Вывода, куда ?
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
15.12.2022, 12:38
Цитата Сообщение от KSergey9 Посмотреть сообщение
std::string GetClassName() const
По значению?

Предлагаю возвращать по константной ссылке.
C++
1
2
3
4
const std::string &getClassName() const
{
    return className;
}
0
15.12.2022, 12:42

Не по теме:

Цитата Сообщение от lemegeton Посмотреть сообщение
Предлагаю возвращать по константной ссылке
Предлагаю на std::string вообще не завязываться, не нужен он тут.
std::string_view или const char*

0
15.12.2022, 12:43

Не по теме:

Цитата Сообщение от lemegeton Посмотреть сообщение
Предлагаю возвращать по константной ссылке.
Предлагаю вообще ничего не возвращать, сказать что вернем, но не вернуть.
Или вернуть, но позже.
А если позже, то можно и не возвращать.
;D

0
15.12.2022, 12:46

Не по теме:

Цитата Сообщение от SmallEvil Посмотреть сообщение
Предлагаю вообще ничего не возвращать, сказать что вернем, но не вернуть.
Предлагаю вообще забить на программирование и даже ничего не обещать.

0
 Аватар для Mayki_2301
0 / 0 / 0
Регистрация: 14.05.2022
Сообщений: 69
15.12.2022, 12:47
SmallEvil, нужна ваша помощь с написанием функции
0
15.12.2022, 12:47

Не по теме:

SmallEvil, а чтоб не писать лапшу каждый раз, можно макрос заделать, типа

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define DEFINE_CLASS_NAME(class_name) \
  private: \
    inline static const char * const ms_class_##class_name##_name = #class_name; \
  public: \
    virtual const char *get_class_name() noexcept { \
      return ms_class_##class_name##_name; \
    }
 
class parent
{
DEFINE_CLASS_NAME(parent)
};
 
class child : public parent
{
DEFINE_CLASS_NAME(child)
};

0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
15.12.2022, 12:51
С одним статическим полем ничего не получится.
Это поле будет одно на все классы (и базовые и производные).
В результате, в нем окажется имя последнего созданного класса.

Без static:
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
#include <iostream>
#include <string>
using namespace std;
class _Parent
{
protected:
    string name;
public:
    _Parent(){name="Parent";}
    string GetName(){return name;}
};
class _Child:public _Parent
{
public:
    _Child(){name="Child";}
};
int main()
{
    _Parent a;
    _Child b;
    cout<<a.GetName()<<endl;
    cout<<b.GetName()<<endl;
    cin.get();
    return 0;
}
1
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
15.12.2022, 12:51
Цитата Сообщение от Fershtein Посмотреть сообщение
Подскажите, как это можно сделать?
Если дословно следовать вашей инструкции:
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>
 
// Допустим, у нас есть родительский класс Class_Parent.
struct Class_Parent {
    // В классе Class_Parent есть статическое поле "Имя класса", а также метод "Вывести имя класса"
    inline static const char *CLASS_NAME = "Class_Parent";
    virtual void printClassName() const {
        std::cout << CLASS_NAME;
    }
};
 
// А также если два дочерних класса: Class_Child и Class_Baby, которые оба наследуют класс Class_Parent
struct Class_Child : public Class_Parent {
    // А дочерние классы наследуют этот метод и должны с его помощью выводить свои имена класса (Class_Child и Class_Baby соответственно)
    void printClassName() const override {
        std::cout << "Class_Child";
    }
};
 
// А также если два дочерних класса: Class_Child и Class_Baby, которые оба наследуют класс Class_Parent
struct Class_Baby : public Class_Parent {
    // А дочерние классы наследуют этот метод и должны с его помощью выводить свои имена класса (Class_Child и Class_Baby соответственно)
    void printClassName() const override {
        std::cout << "Class_Baby";
    }
};
Но это бред кошачий, с точки зрения более-менее нормального подхода к программированию.
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
15.12.2022, 12:52  [ТС]
SmallEvil,
Цитата Сообщение от SmallEvil Посмотреть сообщение
Вывода, куда ?
На экран
0
Заблокирован
15.12.2022, 12:55

Не по теме:

zayats80888, это красивые дебри.
Но лапшу любят все ;)
А кто не любит варить лапшу и манную кашу - используют кодогенераторы. Наверное.
Может запилим меташаблон для создания таких вот отпрысков ?
А то дефайны нынче не в моде.
:)


Fershtein, ну как вам, варианты "функции", помогли ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.12.2022, 12:55
Помогаю со студенческими работами здесь

Вывод имени пользователя или имени компьютера пользователя БД
Здравствуйте. Есть БД на аксесс 2013+SQL Server. Файл БД хранится на сетевом ресурсе, пользователи входят в БД по ярлыку. При открытии БД...

Перехват имени класса
Как перехватить имя класса апликухи в Windows? Например при запуске моей программы, нужно убить все открытые до этого Excel`ы.Говорят что...

Поиск класса по имени
Всем доброго времени суток. Помогите, пожалуйста, решить одну проблему. У меня есть класс TMyClass и куча различных потомков...

Инициализация класса по имени
Допустим у меня есть базовый класс A, и 100 подклассов с другими именами Я бы хотел вывести присвоить объекту класса А ссылку на объект...

Получение Класса по имени
Как получить класс имея его имя в переменной? ухитрился найти такое Dim s = Activator.CreateInstanceFrom('путь.dll', 'класс') ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru