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

как узнать,является данный объект класса А1 наследником класса А2

21.12.2012, 12:03. Показов 7536. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет)есть классы S, A1, A2, B1, B2. Иерархия наследования следующая
S - Является родителем для всех классов и он имеет чисто виртуальную функцию
S -> B1 -> B2
S -> A1 -> A2
C++
1
2
3
4
5
6
7
8
9
#include <stdio.h>
void main()
{
   B2 * b2 = new B2();
   A2 * a2 = new A2();
   S * s1 = a2;
   //вопрос? как узнать, является ли объект по указателю s1 наследником класса A2 или не является наследником B2?
   
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.12.2012, 12:03
Ответы с готовыми решениями:

Как обратится к обьекту класса, являющегося наследником абстрактного класса
Здравствуйте! У меня есть 4 класса: один виртуальный, следующие 2 - наследуют виртуальный класс и последний класс содержит указатель на...

Как проверить является ли объект базовым классом или наследником
struct Base { int i = -1; }; struct Derived : Base { double d = 0.1; };

Можно ли создать объект класса с таким же именем как у самого класса?
Можно ли создать объект класса с таким же именем как у самого класса? Ну или как то обойти эту проблему?

6
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
21.12.2012, 13:19
Лучший ответ Сообщение было отмечено как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <type_traits>
 
class S {};
class A1: public S {};
class A2: public A1 {};
class B1: public S {};
class B2: public B1 {};
 
int main()
{
    std::cout << std::boolalpha;
    std::cout << "is_base_of:" << std::endl;
    std::cout << "A1, A2: " << std::is_base_of<A1,A2>::value << std::endl;
    std::cout << "B1, A2: " << std::is_base_of<B1,A2>::value << std::endl;
    std::cout<<"\n\n";
    system("pause");
    return 0;
}
3
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
21.12.2012, 13:27
Цитата Сообщение от yuron_477 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream> 
#include <type_traits> 
class S {};
 class A1: public S {};
 class A2: public A1 {};
 class B1: public S {};
 class B2: public B1 {}; 
int main() {
 std::cout << std::boolalpha; 
std::cout << "is_base_of:" << std::endl; 
std::cout << "A1, A2: " << std::is_base_of<A1,A2>::value << std::endl;
 std::cout << "B1, A2: " << std::is_base_of<B1,A2>::value << std::endl;
 std::cout<<"\n\n"; 
system("pause"); 
return 0; 
}
Здорово! Не знал о таком. Но тут же напрашивается вопрос: Каков будет результат?
C++
1
std::cout << "S, B2: " << std::is_base_of<S,B2>::value << std::endl;
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
21.12.2012, 13:38
Стало интересно. Вот нагуглил
http://ru.cppreference.com/w/cpp/types/is_base_of
Но там написано - начиная с С++11...
В Qt есть такой метод inherits (для тех кто произведен от QObject)
А если проще?
C++
1
 if (static_cast<S *>  (a2)) != NULL) ...
Это, кажется, всюду должно работать...
0
4 / 4 / 0
Регистрация: 06.01.2012
Сообщений: 117
21.12.2012, 13:39  [ТС]
Цитата Сообщение от yuron_477 Посмотреть сообщение
C++
1
#include <type_traits>
а эта библиотека откуда пришла???она не подключается!!!Она из фреймворка что ли?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
21.12.2012, 13:49
В задании сказано про объекты классов, а не про сами классы.

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
#include <iostream>
 
 
class S {
 public:
   virtual int get() = 0;
};
 
class A1 : public S {
 public:
   virtual int get() {
      return a1;
   }
   
 private:
   int a1;
};
 
class A2 : public A1 {
 public:
   virtual int get() {
      return a2;
   }
 
 private:
   int a2;
};
 
int main() {
   A1 *a1 = new A1();
   A1 *a2 = new A2();
 
   A2 *test = 0;
 
   test = dynamic_cast< A2 * >( a1 );
 
   if ( test != 0 )
      std::cout << "a1 is A2 object" << std::endl;
   else
      std::cout << "a1 is not A2 object" << std::endl;
 
   test = dynamic_cast< A2 * >( a2 );
 
   if ( test != 0 )
      std::cout << "a2 is A2 object" << std::endl;
   else
      std::cout << "a2 is not A2 object" << std::endl;
 
   return 0;
}
1
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
21.12.2012, 14:07
Цитата Сообщение от dqrest Посмотреть сообщение
а эта библиотека откуда пришла???она не подключается!!!Она из фреймворка что ли?
Она включена в C++11. Надо иметь соответствующий компилятор. Кое что можно почитать здесь: http://www.cplusplus.com/reference/type_traits/
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.12.2012, 14:07
Помогаю со студенческими работами здесь

Как сложить объект базового класса с объектом производного(наследуемого класса)
Как умножить объект базового класса с объектом производного(наследуемого класса): ozenka - объект базового класса, а ves- производного ...

Создание статической функции класса, которая принимает экземпляр этого же класса как объект
Привет. Есть такой код class Model { public: Model(); Model(int verticesSize, int facesSize); ~Model(); static void...

как сделать чтобы объект производного класса сам себя добавлял в список или массив указателей базового класса?
я хотел так, но программа просто падает void Student::add(Base** head) { cout &lt;&lt; &quot;I here&quot; &lt;&lt; endl; this-&gt;setName(); //все...

Объект класса string не является однозначным
Вот ошибка: Ошибка 1 error C2872: left: неоднозначный символ c:\users\м\desktop\documents\visual studio 2013\projects\млита\млита\метод...

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра?
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); } template &lt;class T&gt; void...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru