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

Чем отличаются dynamic_cast и static_cast? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Форматированный вывод. Можно ли реализовать переменную точность http://www.cyberforum.ru/cpp-beginners/thread902578.html
Программа калькулятор. После вычисления значения нужно сделать вывод числа, да так, чтобы только значащие цифры были. С помощью printft. То есть числа разные, я определяю количество значащих цифр после запятой. например: 2.250000, значащих цифр - 2. знаю, что с помощью printft я могу регулировать, сколько чисел выводит. а сделать это число переменным? Пока в голову приходит только...
C++ Как считывать числа с textBox ? Как считывать числа с textBox ? http://www.cyberforum.ru/cpp-beginners/thread902577.html
Мах Елемент C++
Как работать с генератором случайных чисел C++
В интернете нашёл мешалку для vector'a #include <algorithm> #include <functional> #include <vector> #include <set> #include <iostream> #include <ctime> #include <cstdlib>
C++ перевод строки в число, определить делится ли оно на 4 http://www.cyberforum.ru/cpp-beginners/thread902562.html
пожалуйста помогите! нужно определить делится ли строка на 4. я так понял что функция atoi не подходит, как еще это можно сделать?
C++ Вычислить знгачение выражения при заданных условиях. Не могу справиться с задачкой, помогите пожалуйста :) подробнее

Показать сообщение отдельно
Tulosba
:)
Эксперт С++
4391 / 3234 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
22.11.2013, 10:15     Чем отличаются dynamic_cast и static_cast?
Цитата Сообщение от Убежденный Посмотреть сообщение
dynamic_cast работает только для указателей и ссылок и только для полиморфных
классов, связанных открытым наследованием; при попытке использовать его с
чем-нибудь другим произойдет ошибка компиляции.
Не всегда. Вот небольшой пример:
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
#include <iostream>
 
template <class To, class From>
void cast( From* f )
{
    std::cout << std::boolalpha << (nullptr != dynamic_cast<To>(f)) << std::endl;
}
 
class B
{
public:
    virtual ~B() {}
};
 
class D : protected B 
{
public:
    void f() 
    { 
        B* b = new D(); // ОК
        cast<D*>(b); // true только для public наследования, но компилируется независимо от типа наследования
    }
};
 
int main() {
    
    D d;
    
    // B* b = new D(); // Ошибка компиляции если не public наследование
    
    d.f();
 
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru