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

Аналог object в С++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Кроссплатформенный русский шрифт консоли http://www.cyberforum.ru/cpp-beginners/thread97356.html
Вы скажите, что такая тема и вы будите правы... Но у меня дело со всем в другом. Я делаю шрифт в консоле русским, и компилирую свою программу... Запускаю и в итоге все на русском, но проблема заключаеться в следующем: при переносе уже откомпилированного файла на другой комп русский шрифт исчезает и все возвращаеться к иероглифам... Вопрос: как установить русский шрифт в консоле...
C++ Visual Studio 2008, WinAPI - Вывод изображения Как вывести изображение на форму? В гугле искал, но там что-то ничего того,что я могу понять не нашёл =( Понял только , что используеться Битовая Карта (как-то так) http://www.cyberforum.ru/cpp-beginners/thread97339.html
Как вывести введенный текст n-ое количество раз? C++
надо написать прогу которая выводит заданную юзером строчку столько раз, сколько он написал пример: "Hello 10 Hello Hello ..."
C++ как пишется формула
как пишется формула определяющая введеное число простое или нет заранее спс
C++ Visual Studio 2008, WinAPI - Openfile http://www.cyberforum.ru/cpp-beginners/thread97305.html
Подскажите, как используеться функция GetOpenFileName . НУ или скажу так. Мне нужно чтобы вылез диалог с выбором фаила, и получить путь к этому фаилу ну ли не путь а что там.Сразу указатель например не суть.Главное = хочу диалог с выбором фаила. Как сделать?
C++ Есть масив, нужно удалить некоторые елементы, со сдвигом Есть масив, нужно удалить некоторые елементы, со сдвигом. Подскажите как можно реализовать??? подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 1
22.02.2010, 22:10     Аналог object в С++
На C++ это в общем случае решается виртуальными функциями и наследованием. Вообще-то, оно делается так и в исходном примере, просто используется уже встроенный в язык класс-родитель object с определённым универсальным набором методов для всех.
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
class Printable {
public:
    virtual void PrintType (std::ostream& stream) const = 0 {stream<<"Type unknown";}
};
 
class String: public Printable {
public:
    String(const char* str);
    void PrintType (std::ostream& stream) const {stream << "This is string";}
};
 
class Integer: public Printable {
public:
    Integer(int i);
    void PrintType (std::ostream& stream) const {stream << "This is integer";}
};
 
class Other: public Printable {
public:
    Other();
    using void Printable::PrintType (std::ostream& stream) const;
};
 
void F(const Printable& p)
{
    p.PrintType(std::cout);
}
 
int main()
{
    F(Integer(5));
    F(String("some string"));
    F(Other());
    return 0;
}
Конечно, тогда придётся наследовать все типы, которые может понадобиться передавать в F, от Printable. Однако в приведённом примере каждый вызов F применяется к объекту вполне определённого типа. То есть, необходимое действие известно статически, на этапе компиляции. В такой ситуации разумнее воспользоваться как раз шаблонами и специализацией, что позволит применять функцию к встроенным типам, а не создавать специально свои:
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
template<typename T>
void F(const T& obj)
{
    cout << "Unknown type";
}
 
template<>
void F<int> (const int& obj)
{
    cout << "Integer object";
}
 
template<>
void F<const char*> (const char* const &obj)
{
    cout << "It's a string";
}
 
template<>
void F<std::string> (const std::string& obj)
{
    cout << "It's a string too";
}
 
int main()
{
    F(5);
    F(7.7);  // double, напечатается Unknown type
    F("some string");
    F(std::string("Some string too"));
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru