Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Неявный конструктор копирования и неявный оператор присваивания вызывают проблемы в классах, использующих динамическую память.




Пример 3.

Класс комплексные числа.

Выполните программу.

 

#include <iostream>

using namespace std;

class cm{ float re,im; public: cm(){re=im=0;}//конструктор без параметров cm(int _re,int _im){re=_re;im=_im;}//конструктор с параметрами void set();//функция ввода(без параметров) void show();//функция печати (без параметров) cm sum(cm ob); //функция суммирования объекта ob и текущего объекта   int eq(cm ob);//функция сравнения двух объектов на равенство   cm sum1(int a);//функция прибавления к текущему объекту целого числа   };  

 

int main() { cm ob1,ob2(5,-7),ob3;//создание 3-ех объектов ob2.show();//вывод объекта ob2 ob1.set(); ob1.show();//ввод и выод объекта ob1 ob3=ob1.sum(ob2); ob3.show();//нахождение объекта - суммы двух объектов //и вывод результата cout<<ob1.eq(ob2)<<endl;//вывод результата сравнения двух объектов ob1.sum1(8); ob1.show();//прибавление к компонентам объекта числа и //вывод результата return 0; }    

 

void cm::set(void)//описание метода set {cout<<"re,im=? ";cin>>re>>im;}   void cm::show(void)// описание метода show {cout<<re; if(im>0)cout<<"+i"<<im<<endl; else cout<<"-i"<<-im<<endl;}   cm cm::sum(cm ob) //функция суммирования объекта ob и текущего объекта { cm t; t.re=re+ob.re; t.im=im+ob.im; return t;}   int cm::eq(cm ob)//функция сравнения двух объектов на равенство {return re==ob.re&&im==ob.im;}   cm cm::sum1(int a)//функция прибавления к текущему объекту целого числа {re=re+a; im=im+a; return *this; }  

 

Результаты выполнения программы

5-i7 re,im=? 10 20 10+i20 15+i13 18+i28  

 

Упражнение. Добавьте методы: вычитание, умножение, деление комплексных чисел, нахождение в текущем объекте суммы текущего объекта и объекта, заданного в качестве параметра, операция ++. Замените конструктор с параметрами конструктором с параметрами по умолчанию  

 

 

Упражнение Объявите класс “Дробь” и напишите клиентскую программу    

 

Массивы объектов можно создавать точно также, как создаются массивы значений других типов, например:

test ar[3];

Если класс включает параметризованный конструктор, то массив объектов такого класса можно инициализировать, например:

test ar[3]={-1,-2,-3};

При инициализации массива объектов, конструкторы которых принимают несколько аргументов, используется более длинный формат инициализации. Например,конструктор test1 принимает два аргумента:

 

class test1{

private:

int i,j;

public:

test1(int _i,int _j){i=_i; j=_j;}

};

 

main(){

//длинный формат инициализации массива объектов

test1 a[3]={ test1(1,2),test1(3,4),test1(5,6) };

...

}

 

Указатели на объекты позволяют также получить доступ к объекту.

Пример.

test a(1), *p; //объявляем объект a и указатель на него - p

a.print();

p=&a; //присваиваем указателю адрес объекта

p->print(); //получаем доступ к объекту с помощью указателя

 

 

Функции-“друзья” разрешают функциям, которые не являются членами этого класса, доступ к закрытым членам класса.

Для объявления функции “другом” класса в объявление класса включается прототип функции в public-разделе объявления класса, прототип предваряется ключевым словом friend.

Функции-“другу” в качестве параметров передается один или несколько объектов класса, для которого она является другом.

Реализация функции-друга не использует квалификацию имени функции именем класса.

Функция-“друг” вызывается обычным образом, т.е. без привязки к объекту (и без использования оператора “точка”).

 

Пример. Функция-другprint используется для доступа к закрытой переменной класса.

class test{

private:

int i;

public:

test(int _w=0){i=_w;}

~test(){ }

friend void print(test ob);// функция print –“друг” класса test

};

//реализация функции print (print не является членом класса)

void print(test ob)

{

cout<<ob.i<<endl;//функция имеет право на прямой доступ к члену класса i

}

 

main(){

 

test a(1);

print(a);// функция-“друг” вызывается обычным образом

test b;

print(b);

...

}

 

 





Поделиться с друзьями:


Дата добавления: 2016-11-18; Мы поможем в написании ваших работ!; просмотров: 278 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

80% успеха - это появиться в нужном месте в нужное время. © Вуди Аллен
==> читать все изречения...

2305 - | 2162 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.