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

Исключение для чисто виртуальной функции - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Странное поведение при переопределении operator++ http://www.cyberforum.ru/cpp-beginners/thread942482.html
Всем привет! Изучая переопределения в С++ наткнулся на следующую непонятку: #include <iostream> using namespace std; class Car { int * itsage; public:
C++ Как написать максимально оптимизированную функцию поиска длинны строки? Мысль о максимально оптимизированной функции длинны строки, где строка это указатель на литерал типа char. Не будем использовать не std::string, не std::wstring, не wchar_t в функцию передается указатель на строку, вот тело: int main() { char * str= "hello world"; int v = length(str); std::cout << v << std::endl; std::cin.get(); } http://www.cyberforum.ru/cpp-beginners/thread942451.html
C++ Создание .exe
Здравствуйте, я лишь неделю в программировании пытаюсь разбираться и соответственно вопросы мои могут показаться глупыми. Но столкнулся с проблемой что в Dev C++ что в NetBeans IDE при компеляции не создается файл exe. При чем если написать простую программку в стиле: #include <cstdlib> #include <iostream> #include <string> #include <ctime> #include <iomanip> using namespace std;
битовые операции C++
как из 0001 0000 тоесть в dec '8' сделать 0000 0001 в dec '1'?
C++ Вывод значений вектора на экран http://www.cyberforum.ru/cpp-beginners/thread942415.html
есть правильно заполненный вектор: vector<Employee*> emp; один из экземпляров: Bytime bt1("Ahmed", 2, 6.0); необходимо вывести три последние значения ID (второй параметр)на экран. Написал функцию в родительском классе:
C++ Post запрос 1) Здравствуйте, в общем я пытаюсь написать программу для одного сайта, все получается авторизация готова, но делаю 1 функцию не могу понять откуда берется 1 переменная в пост date. Я через сниффер смотрю, ну вы понимаете. И вот значение этой переменной я не могу уловить откуда оно берется. Есть ли у вас какие-то соображения. 2) И еще я работаю без куки, может ли это значение браться из куки ? подробнее

Показать сообщение отдельно
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,722
Записей в блоге: 3
26.08.2013, 00:24     Исключение для чисто виртуальной функции
ArkTaS, если речь о указателях а не значениях, то усечения нет. Просто "слепо" указатель указывает на то на что указывает (в зависимости от типа его объявления). А доступ к виртуальным функциям через указатель базового класса это как исключение. Тем не менее если фактически он указывает на наследника и вы ему "раскроете глаза" приведением к типу этого наследника, то получите доступ. Потому, что фактически там оно есть.
Вот пример:
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
#include <iostream>
using namespace std;
class A{
public:
int a;
A(int a_):a(a_){}
virtual void foo(){
cout<<"A.a= "<<a<<endl;
}
virtual void foo_to_ext(){}//мудро заготовили (так не бывает))
};
 
class B : public A
{
public:
int b;// расширение полем b
B(int a_, int b_) :A(a_), b(b_){}
virtual void foo(){
cout<<"B.a= "<<a<<endl;
}
virtual void foo_to_ext(){//к счастью завалялась ненужная v-func'ция :D
cout<<"B.b= "<<b<<endl;
}
};
int main()
{
 A* basePtr = new B( 1, 2);
basePtr->foo();
//cout<<basePtr->b; //это даже не компилируется 
//т.к. доступ только к V-functions, в остальном это указатель на А
 basePtr->foo_to_ext();//а это сработает: v-func'ция достала поле которого в A нет)
 
 
    system("pause");
    return 0;
}
Правда оба поля можно было и в первой foo достать, но может так понятнее.
 
Текущее время: 09:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru