Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Доступ к данным и методам

 

Доступ к public (открытым) членам-данным возможен через оператор точка (.): < имя_объекта >. < имя_члена-данного >.


// Пример 6.2.7

// Доступ к открытым членам простого класса

#include <iostream>

using namespace std;

 

// Объявление простейшего класса с открытыми данными-членами

class Cat {

public:

short itsAge; // возраст

double itsWeight; // вес

};

 

int main() {

setlocale(LC_ALL, "Russian"); // для вывода на экран русского текста

// Создание объектов стандартных типов

int a; // объект типа int с мусором внутри

cout << "a=\t" << a << endl;

cin.get();

int b=10; // проинициализированный объект типа int

cout << "b=\t" << b << endl;

cin.get();

int c=100,d=200; // несколько объктов типа int

cout << "c=\t" << c << "\td=\t" << d << endl;

cin.get();

// Создание объектов нестандартных типов

Cat Vaska; // Vaska - объект типа Cat с мусором внутри

cout << "Возраст кота Vaska = " << Vaska.itsAge << "\n";

cout << " Вес кота Vaska = " << Vaska.itsWeight << ".\n";

cin.get();

// доступ к public членам-данным через.

Vaska.itsAge=5;

Vaska.itsWeight=10.2;

cout << "Возраст кота Vaska = " << Vaska.itsAge << "\n";

cout << " Вес кота Vaska = " << Vaska.itsWeight << ".\n";

cin.get();

// Размер объекта

cout << "Размер объекта Vaska = " << sizeof(Cat) << endl;

cin.get();

// создание других объектов типа Cat в стековой памяти

Cat Murka, Borka; // Murka, Borka - объекты типа Cat с мусором внутри

cout << " Возраст кошки Murka = " << Murka.itsAge << "\n";

cout << "Вес кошки Murka = " << Murka.itsWeight << "\ n";

cout << " Возраст кота Borka = " << Borka.itsAge << " n";

cout << " Вес кота Borka = " << Borka.itsWeight << "\n";

cin.get(); cin.get();

return 0;

}

 

// Пример 6.2.8

// Создание и работа с объектами типа Pencil в стеке приложения

#include <iostream>

using namespace std;

typedef unsigned short int USHORT;

enum Color {Single, Red, Black, Green };

// Объявление класса

class Pencil {

public:

USHORT itsLength; // длина, мм

USHORT itsRadius; // радиус, мм

bool itsEraser; // наличие резинки

Color itsColor; // цвет

float itsPrice; // цена, гр.

char itsCaption[31]; // надпись

};

// главная функция

int main() {

setlocale(LC_ALL, "Russian"); // для вывода на экран русского текста

//создание первого объекта типа Pencil в стеке приложения

Pencil p1; // внутри мусор

cout << p1.itsLength << '\t' << p1.itsRadius << '\t' << p1.itsEraser << '\t'

<< p1.itsColor << '\t' << p1.itsPrice << '\t' << p1.itsCaption << endl;

cin.get();

// Определение свойств объекта p1 - set

p1.itsLength=200;

p1.itsRadius=10;

p1.itsEraser=true;

p1.itsColor=Single;

p1.itsPrice=0.3;

strcpy(p1.itsCaption,"Fantastic");

// Получение свойств объекта p1 - get

cout << p1.itsLength << '\t' << p1.itsRadius << '\t' << p1.itsEraser << '\t'

<< p1.itsColor << '\t' << p1.itsPrice << '\t' << p1.itsCaption << endl;

cin.get();

//создание второго и третьего объектов типа Pencil в стеке приложения

Pencil p2,p3; // внутри каждого из них мусор

cout << p2.itsLength << '\t' << p2.itsRadius << '\t' << p2.itsEraser << '\t'

<< p2.itsColor << '\t' << p2.itsPrice << '\t' << p1.itsCaption<< endl;

cout << p3.itsLength << '\t' << p3.itsRadius << '\t' << p3.itsEraser << '\t'

<< p3.itsColor << '\t' << p3.itsPrice << '\t' << p1.itsCaption<< endl;

cin.get();

// Определение свойств объекта p2 - set

p2.itsLength=50;

p2.itsRadius=10;

p2.itsEraser=false;

p2.itsColor=Red;

p2.itsPrice=0.5;

strcpy(p2.itsCaption,"Kohinor");

// Определение свойств объекта p3 - set

p3.itsLength=80;

p3.itsRadius=8;

p3.itsEraser=true;

p3.itsColor=Black;

p3.itsPrice=0.35;

strcpy(p3.itsCaption,"Konstructor");

// Получение свойств объекта p2 - get

cout << p2.itsLength << '\t' << p2.itsRadius << '\t' << p2.itsEraser << '\t'

<< p2.itsColor << '\t' << p2.itsPrice << endl;

// Получение свойств объекта p3 - get

cout << p3.itsLength << '\t' << p3.itsRadius << '\t' << p3.itsEraser << '\t'

<< p3.itsColor << '\t' << p3.itsPrice << endl;

cin.get();

// Обработка объектов - определение общей стоимости 3-х карандашей

double sum;

sum=p1.itsPrice+p2.itsPrice+p3.itsPrice;

cout << " Общая цена (SUM) = " << sum << endl;

cin.get();

// Обработка объектов - определение максимальной стоимости

double max;

(p1.itsPrice > p2.itsPrice)? max = p1.itsPrice: max = p2.itsPrice;

(p3.itsPrice > max)? max = p3.itsPrice: max;

cout << "Максимальная цена (MAX) = " << max << endl;

cin.get();

// Обработка объектов - определение количества карандашей с резинкой

short n=0;

if (p1.itsEraser) n++;

if (p2.itsEraser) n++;

if (p3.itsEraser) n++;

cout << "Число карандашей с резинкой = " << n << endl;

cin.get();

return 0; //... происходит уничтожение стековых объектов

}

 

12. Объявление класса и его реализация

 

Более сложные классы – это классы с открытыми членами-данными и функциями (методами). В них две части: объявление класса и реализация класса. В объявлении класса записываются данные-члены класса и прототипы функций-членов класса. Реализация функций класса располагается под объявлением класса. При этом определение каждой функции класса содержит тип возврата, полное имя функции (имени класса за которым следуют два двоеточия и имя функции), список параметров и при необходимости ключевое слово const, которое гарантирует, что ни один оператор функции не сможет изменить значения любого члена-данного класса. Вызов public (открытых) членов-функций выполняется через оператор (.): < имя_объекта >. < имя_члена-функции >.


// Пример 6.2.9

//Объявление и реализация классов

#include <iostream>

using namespace std;

//Объявление класса

class Cat {

//открытая часть класса

public:

// методы класса

void Meow();

void Jump(int);

// члены-данные

int itsAge;

};

//Реализация методов класса

void Cat::Meow() {

cout << "Мяу\n";

}

void Cat::Jump(int n) {

cout << "Число шагов в прыжке: " << n << " \n";

}

 

int main() {

setlocale(LC_ALL, "Russian"); // для вывода на экран русского текста

Cat Vaska; // создание объекта типа Cat с именем Vaska в стеке

Vaska.Meow(); // вызов метода Meow() для объекта Vaska

// вывод значения поля itsAge для объекта Vaska - мусор

cout << "Возраст кота Vaska = " << Vaska.itsAge << "\n";

Vaska.Jump(5); //вызов метода Jump(5) для объекта Vaska

Vaska.itsAge=7; //изменение поля itsAge для объекта Vaska

// вывод значения поля itsAge для объекта Vaska - 7

cout << "Возраст кота Vaska = " << Vaska.itsAge << "\n";

Vaska.Jump(-2); //вызов метода Jump(-2) для объекта Vaska

cin.get();

Cat Murka; //создание объекта типа Cat с именем Murka в стеке

// вывод значения поля itsAge для объекта Murka- мусор

cout << "Возраст кота Murka = " << Murka.itsAge << "\n";

cin.get();

return 0; //... происходит уничтожение стековых объектов

}

 

// Пример 6.2.10

//Объявление и реализация классов

#include <iostream>

using namespace std;

typedef unsigned short int USHORT;

enum Color {Single, Red, Black, Green };

// объявление класса

class Pencil {

public:

// члены-данные, свойства, поля (data members, properties, fields)

USHORT itsLength;

USHORT itsRadius;

bool itsEraser;

Color itsColor;

double itsPrice;

char itsCaption[31];

// члены-функции, методы (member-functions, methods)

void DisplayAllToScreen() const; // вывод полей класса на экран

void GetAllFromKeyBoard(); // ввод значений

};

 

// реализация класса

// вывод полей класса на экран

void Pencil::DisplayAllToScreen() const {

//itsLength=0; // нельзя - т.к. это константная функция

cout << "Длина: " << itsLength << endl

<< "Радиус: " << itsRadius << endl

<< "Резинка: " << itsLastic << endl

<< "Цвет: " << itsColor << endl

<< "Цена: " << itsPrice << endl

<< "Надпись: " << itsCaption << endl << endl << endl;

}

// ввод значений полей класса с клавиатуры

void Pencil::GetAllFromKeyBoard() {

USHORT color;

cout << "Введите длину, радиус, наличие резинки(0-1), цвет(0-3), "
<< " цену, надпись через пробел\n";

cin >> itsLength >> itsRadius >> itsEraser >> color
>> itsPrice >> itsCaption;

itsColor=(Color)color;

}

 

//главная функция

int main() {

setlocale(LC_ALL, "Russian"); // для вывода на экран русского текста

//создание первого объекта типа Pencil

Pencil p1;

p1.DisplayAllToScreen(); // вывод на экран - мусор

p1.GetAllFromKeyBoard(); // ввод с клавиатуры

p1.DisplayAllToScreen(); // вывод на экран

cin.get();

//создание второго объекта типа Pencil

Pencil p2;

p2.DisplayAllToScreen(); // вывод на экран - мусор

p2.GetAllFromKeyBoard(); // ввод с клавиатуры

p2.DisplayAllToScreen(); // вывод на экран

cin.get();

return 0; //... происходит уничтожение стековых объектов

}

 

13. Размещение класса в файлах

 

На практике описание одного класса размещают в двух внешних файлах. В первом (имеет обычно расширение hpp) находится объявление класса, а во втором (расширение cpp) - подключение оператором #include объявления класса и реализация методов класса. Объявление класса часто называют интерфейсом класса, поскольку из него программист может узнать о правилах работы с этим классом. Реализация методов класса представляет обычно интерес для автора класса или сопровождающего класс программиста.

 

// Пример 6.2.11 – одномодульный проект

//Объявление класса – файл Cat.h

class Cat {

//открытая часть класса

public:

// методы класса

void Meow();

void Jump(int);

// члены-данные

int itsAge;

};

 

//реализация класса – файл Cat.cpp

#include <iostream>

using namespace std;

// подключение объявления класса

#include "cat.h"

//Реализация методов класса

void Cat::Meow() {

cout << "Мяу\n";

}

void Cat::Jump(int n) {

cout << "Число шагов в прыжке: " << n << " \n";

}

 

// главная функция – файл main.cpp

#include <iostream>

using namespace std;

// реализация класса

#include "cat.cpp"

int main() {

setlocale(LC_ALL, "Russian"); // для вывода на экран русского текста

Cat Vaska; //создание объекта в стеке - мусор

cout << "Возраст кота Vaska = " << Vaska.itsAge << "\n";

Vaska.Jump(5);

Vaska.itsAge=7;

cout << "Возраст кота Vaska = " << Vaska.itsAge << "\n";

cin.get();

return 0; //... происходит уничтожение стековых объектов

}

 

14. Реализация функций в объявлении класса

 

Реализация коротких функций может быть записана непосредственно в объявлении класса. Подобные функции-члены класса имеют статус inline -функций.


// Пример 6.2.12

//Объявление и реализвция классов - inline функции

#include <iostream>

using namespace std;

//Объявление класса

class Cat {

//открытая часть класса

public:

// методы класса

void Meow(){cout << "Мяу\n";} // inline-функция (по умолчанию)

void Jump(int);

// члены-данные

int itsAge;

};

//Реализация класса – не inline-функция

void Cat::Jump(int n) {

cout << "Число шагов в прыжке: " << n << " \n";

}

int main() {

setlocale(LC_ALL, "Russian"); // для вывода на экран русского текста

Cat Vaska; //создание объекта в стеке - мусор

cout << "Возраст кота Vaska = " << Vaska.itsAge << "\n";

Vaska.Jump(5);

Vaska.itsAge=7;

cout << "Возраст кота Vaska = " << Vaska.itsAge << "\n";

cin.get();

return 0; //... происходит уничтожение стековых объектов

}

 

<== предыдущая лекция | следующая лекция ==>
Создание объектов | Описание сложных объектов
Поделиться с друзьями:


Дата добавления: 2014-01-03; Просмотров: 375; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.079 сек.