|
Программирование >> Дополнительные возможности наследования
Вопросы п ответы в комментарии, содержащемся в строках 659, говорится, что С++ не поддерживает контравариантность. Что такое контравариантность? Контравариантностью называется возможность создания указателя базового класса на указатель производного класс. предупреждение ВНИМАНИЕ: Этот листинг не будет скомпилирован! Аисшапг 3.2. Пример контравариатлности #include<iostream.h> class Animal public: virtual void Speak() { cout Animal Speaks\ n ; } class Dog : public Animal { public: void SpeakO { cout Dog Speaks\ n ; } class Cat : public Animal { public: void SpeakO { cout Cat Speaks\ n ; } void DoIt(Cat ); void DoIt(Dog ); int mainO { Animal * pA = new Dog; DoIt(pA); return 0; void DoIt(Cat * c) { cout They passed a cat!\ n endl; c->Speak(); void DoIt(Dog * d) { cout They passed a dog!\ n endl; d->Speak(); Ho в С++ эту проблему можно решить с помощью виртуальной функции. #include<iostream,h> class Animal { public; virtual void Speak() { cout Animal Speaks\ n ; } } ; class Dog ; public Animal { public; void SpeakO { cout Dog Speaks\ n ; } class Cat ; public Animal { public; void SpeakO { cout Cat Speaks\ n ; } void DoIt(Animal*); int mainO { Animal pA = new Dog; DoIt(pA); return 0; void DoIt(Animal * c) { cout They passed some kind of animal\ n << endl; c->Speak(); sAms Левой самостоятельно Пришиае fl Приоритеты операторов Важно понять, что операторы имеют приоритеты, но запоминать их совсем не обязательно. Приоритет оператора определяет последовательность, в которой профамма выполняет операторы в выражении или формуле. Если один оператор имеет приоритет над другим оператором, то он выполняется первым. Приоритет оператора убывает с увеличением номера категории. Все операторы одной категории имеют равный приоритет. Унарные операторы (категория 3), условный оператор (категория 14) и операторы присваивания (категория 15) ассоциируются справа налево, все остальные - слева направо. В приведенной ниже таблице операторы перечислены по категориям в порядке убывания их приоритетности. Прирришоты онерапюрар Квтвйврия 1 (наивысшего приоритета) Ивзвваав или двВствив Разрешение области видимости, индексирования ;: [ ] 3 (унарные) (мультипликативные) 5 (аддитивные) 6 (сдвига) Прямое и косвенное обращение к члену класса Вызов функции Постфиксные инкремент и декремент Префиксные инкремент и декремент Размер Дополнение до единицы и логическое отрицание Унарные минус и плюс Получение адреса и разыменование Создание и удаление динамического объекта Приведение типа Умножение, деление, деление по модулю Бинарный плюс, бинарный минус Вывода и ввода . -> sizeof, sizeofО new, new[. delete, delete[] casting . / %
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |