Конструктор-копировщик.
В предложенной программе используются дополнительные возможности функций-членов — перегрузка, использование значений по умолчанию, использование нескольких конструкторов, в том числе и по умолчанию, перегрузка операторов = и +и конструктор –копировщик Копировщик, предоставляемый компилятором, осуществляет схему поверхностного копирования может привести к ошибкам в случае, если среди данных-членов класса имеется указатели.
Вторая схема представляет поверхностное копирование (если один из компонентов класса содержит указатель) и в случае уничтожения этого данного, уничтожится значение и для объекта, который был скопирован. (так как существует два указателя указывающие на один адрес)
Первая схема для глубинного копирования позволяет полностью скопировать все данные, а не только указатели.
Лекция № 7.Наследование Закрытый. Защищённый Форматированный ввод. Ввод-вывод в файл.
Наследование.
Наследование обозначает такое отношение между классами, когда один класс использует структурную или функциональную часть одного или нескольких классов (соответственно простое и множественное наследование).
Наследование является иерархической системой, позволяющей лучше выразить взаимодействия между классами. Иерархия представляет собой вид отношений подчинённости типа: принадлежности частного общему.
Когда мы говорим, что нечто является видом чего-либо, мы подразумеваем большую детализацию.
В С++ иерархичность реализована в концепции классов — когда один класс может наследовать или происходить от класса более высокого уровня. В наследовании классов реализуются принципы их иерархической подчинённости.
Если объявляется наследуемый класс, то базовый класс должен быть описан выше, иначе компилятор сгенерирует ошибку.
Синтаксис : (открытое наследование):
Class имя_класса :< режим доступа> имя_базового_класса.
В описании базового класса появляется новое слово:protected, так как данные под словом private не доступны для наследования.
Какой бы доступ не был определён для наследования данные, описанные в базовом классе как private не доступны для производного класса.
#include <iostream.h>
Class base
{ int x;
public:
void setx(int n){x=n;}
void prinx(){cout<<"x="<<x<<"\n";}
};
class deriv : private base
{
Int y;
public:
void setxy(int n,int m){setx(n);y=m;}
void prinxy(){prinx();cout<<"y="<<y<<"\n";}
};
Void main(void)
{
Deriv ob;
cout <<"результат работы программы: \n" ;
Ob.setxy(10,25);
Ob.prinxy();
}
результат работы программы:
x=10
y=25
Дата добавления: 2015-12-26; просмотров: 663;