Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Топ:
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Интересное:
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Дисциплины:
2021-12-07 | 34 |
5.00
из
|
Заказать работу |
|
|
Обычно при создании объекта производного класса требуется инициализировать данные не только производного, но и базового классов. Для этого в конструкторе производного класса надо явно вызвать конструктор базового класса и передать ему необходимые параметры. Рассмотрим этот вопрос на примере классов Men и MenEx, из которых уберем функции Set () и Print () и добавим конструкторы-инициализаторы:
class Men{
char* name;
int age;
public:
Men(char* n, int a){name=n; age=a;}
};
class MenEx:public Men{
int wages;
public:
MenEx(char* n,int a,int w):Men(n,a){
wages=w;
}
};
В конструкторе производного класса перечисляются в качестве параметров все переменные как производного, так и базового классов. В соответствии с правилами написания заголовка функции все параметры предваряются их типами. После двоеточия указывается имя конструктора базового класса с перечнем его параметров. Здесь типы переменных уже не указываются. В теле конструктора производного класса осуществляется обычная инициализация его данных. При вызове конструктора производного класса (с целью создания комбинированного объекта, включающего члены обоих классов) необходимо, в соответствии с его описанием, передать ему три аргумента:
MenEx m(”Краснов”, 44, 12000);
Первые два аргумента (”Краснов” и 44) преобразуются в параметры n и a будут переданы конструктору класса Men, в котором они инициализируют данные-члены класса name и age. Третий аргумент (12000) поступит в параметр w и будет использован в конструкторе производного класса для присвоения значения переменной wages, входящей в класс MenEx.
Как известно, параметры любых функций в языке С++ позиционные. Вызывая функцию, мы должны передавать ей фактические аргументы в том порядке, в каком они указаны в ее определении. Поэтому и в конструкторе класса MenEx параметры класса Men следует перечислять в том порядке, в каком они указаны в конструкторе (уже имеющемся) класса Men. Таким образом, при разработке производного класса необходимо знать, как выглядит прототип конструктора базового класса.
|
Мы рассмотрели формат встроенного конструктора производного класса, когда и вызов базового конструктора, и тело производного включаются в его объявление. Для невстроенного конструктора вызов конструктора базового класса осуществляется не в прототипе, а в определении конструктора производного класса:
MenEx(char*,int,int);// Прототип конструктора
MenEx(char* n,int a,int w):Men(n,a){wages=w;}// Определение
Виртуальные функции
Понятие виртуальной функции
В разделе 3 мы уже столкнулись с понятием полиморфизма, когда описывали перегруженные функции, т. е. функции с одним именем, но с различающимися списками параметров. Настоящий раздел будет посвящен другой форме полиморфизма, реализуемой в виртуальных функциях. Виртуальные функции тоже имеют одно имя, но различаются они не по сигнатурам, как в случае перегруженных функций, а по тому, в каком именно классе (из некоторой иерархии классов) они определены. Виртуальные функции замечательны тем, что выбор требуемой из множества виртуальных функций с одним именем осуществляется не во время компиляции программы, а динамически, в процессе выполнения программы, по конкретному значению указателя, посредством которого эта функция вызывается.
Виртуальная функция объявляется в базовом классе с помощью ключевого слова virtual и затем обязательно замещается по крайней мере в одном производном классе. При этом не только имя, но и типы параметров, а также тип возвращаемого значения для замещаемых функций должны быть такими же, как для “исходной” функции, объявленной в базовом классе. В производных классах объявления этих замещенных функций могут для наглядности содержать описатель virtual, но это не обязательно; если функция объявлена виртуальной в базовом классе, то все замещающие ее функции в производных классах автоматически становятся виртуальными.
|
Виртуальные функции проявляют свойство виртуальности только в том случае, если они вызываются через указатель или ссылку на базовый класс. Как будет показано ниже, указатель на базовый класс может принимать конкретное значение указателя на производный класс; если этот указатель к моменту вызова функции фактически указывает на объект базового класса, вызывается вариант функции из базового класса; если же указатель фактически указывает на некоторый объект производного класса, вызывается вариант функции из этого производного класса.
|
|
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!