КАТЕГОРИИ: Архитектура-(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 (открытым) членам-данным возможен через оператор точка (.): < имя_объекта >. < имя_члена-данного >.
// Доступ к открытым членам простого класса #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 (открытых) членов-функций выполняется через оператор (.): < имя_объекта >. < имя_члена-функции >.
//Объявление и реализация классов #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), " cin >> itsLength >> itsRadius >> itsEraser >> color 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 -функций.
//Объявление и реализвция классов - 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; Просмотров: 411; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |