Использование в системах программирования графики и мультимедиа


Download 454.62 Kb.
Pdf ko'rish
bet8/10
Sana23.04.2023
Hajmi454.62 Kb.
#1383220
TuriЛекция
1   2   3   4   5   6   7   8   9   10
Bog'liq
Лекция 15. Использование в системах программирования графики и мультимедиа.

членами или методами. Методы могут быть определены внутри или вне 
класса. Пока что мы будем определять их внутри класса (для простоты), как 
определить их вне класса — рассмотрим несколько позже. 
Класс Date с методом вывода даты: 









DateClass 
{ class 
public: 
int m_day; 
int m_month; 
int m_year; 
void print() // определяем функцию-член 

std::cout << m_day << "/" << m_month << "/" << m_year; 

}; 
Точно так же, как к членам структуры, так и к членам (переменным и 
функциям) класса доступ осуществляется через оператор выбора 
членов (.): 








#include  
class DateClass 

public: 
int m_day; 
int m_month; 
int m_year; 
void print() 

std::cout << m_day << "/" << m_month << "/" << m_year; 




10 
11 
12 
13 
14 
15 
16 
17 
}; 
int main() 

DateClass today { 12, 11, 2018 }; 
today.m_day = 18; // используем оператор выбора членов для выбора 
переменной-члена объекта today класса DateClass 
today.print(); // используем оператор выбора членов для вызова метода 
объекта today класса DateClass 
return 0; 

Результат выполнения программы выше: 
18/11/2018 
Обратите внимание, как эта программа похожа на программу выше (где 
используется структура). 
Однако есть несколько отличий. В версии DateStruct для print() нам нужно 
было передать переменную структуры непосредственно в функцию print() 
в качестве параметра. Если бы мы этого не сделали, то print() не знал бы, 
какую переменную DateStruct выводить. Нам тогда бы пришлось явно 
ссылаться на члены структуры внутри функции. 
Методы класса работают несколько иначе: все вызовы функций-членов 
должны 
быть 
связаны 
с 
объектом 
класса. 
Когда 
мы 
вызываем today.print(), 
мы 
сообщаем 
компилятору 
вызвать 
метод print() объекта today. 
Рассмотрим определение метода print() ещё раз: 




void print() // определяем функцию-член 

std::cout << m_day << "/" << m_month << "/" << m_year; 

На 
что 
фактически 
ссылаются m_day, m_month и m_year? 
Они 
ссылаются на связанный объект today(который определён caller-ом). 
Поэтому, при вызове today.print(), компилятор интерпретирует: 


m_day как today.m_day; 
m_month как today.m_month; 
m_year как today.m_year. 
Если бы мы вызвали tomorrow.print(), то m_day ссылался бы 
на tomorrow.m_day. 
По сути, связанный объект неявно передаётся функции-члену. По этой 
причине его часто называют неявным объектом
Детальнее о том, как передаётся неявный объект функции-члену, мы 
поговорим в следующих уроках. Ключевым моментом здесь является то, 
что для работы с функциями, не являющимися членами класса, нам нужно 
передавать данные в эту функцию явно (в качестве параметров). А для 
работы с методами у нас всегда есть неявный объект класса! 
Использование префикса m_ (англ. «m» = «members») для переменных-
членов помогает различать переменные-члены от параметров функции или 
локальных переменных внутри методов класса. Это полезно по нескольким 
причинам: 
Во-первых, когда мы видим переменную с префиксом m_, то мы 
понимаем, что работаем с переменной-членом класса. 
Во-вторых, в отличие от параметров функции или локальных 
переменных, 
объявленных 
внутри 
функции, 
переменные-члены 
объявляются в определении класса. Следовательно, если мы хотим знать, 
как объявлена переменная с префиксом m_, то мы понимаем, что искать 
нужно в определении класса, а не внутри функции. 
Обычно программисты пишут имена классов с заглавной буквы. 

Download 454.62 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   10




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling