Презентация Дружественные и подставляемые функции. Структуры, объединения в С онлайн
На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему Дружественные и подставляемые функции. Структуры, объединения в С абсолютно бесплатно. Урок-презентация на эту тему содержит всего 26 слайдов. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Устройства и комплектующие » Дружественные и подставляемые функции. Структуры, объединения в С
Оцените!
Оцените презентацию от 1 до 5 баллов!
- Тип файла:ppt / pptx (powerpoint)
- Всего слайдов:26 слайдов
- Для класса:1,2,3,4,5,6,7,8,9,10,11
- Размер файла:204.51 kB
- Просмотров:85
- Скачиваний:0
- Автор:неизвестен
Слайды и текст к этой презентации:
№2 слайд
![Дружественные функции Обычная](/documents_6/c26965b2602a075947a7ddc3d861fb51/img1.jpg)
Содержание слайда: Дружественные функции
Обычная функция, которая имеет доступ к закрытым и защищенным членам класса
Объявление дружественной функции – прототип функции помещается внутри класса, указав перед ней ключевое слово friend
Дружественная функция не является членом класса, поэтому при ее вызове не нужно указывать имя объекта и использовать оператор ‘.’
№3 слайд
![Преимущества и ограничения](/documents_6/c26965b2602a075947a7ddc3d861fb51/img2.jpg)
Содержание слайда: Преимущества и ограничения использования дружественных функций
Преимущества:
позволяют перегружать некоторые виды операторов
облегчают создание некоторых функций ввода-вывода
полезны, когда несколько классов могут содержать члены, тесно связанные с другими частями программы
Ограничения:
производный класс не наследует дружественные функции
дружественные функции не могут содержать спецификатор хранения (static, extern)
№4 слайд
![Пример дружественной функции](/documents_6/c26965b2602a075947a7ddc3d861fb51/img3.jpg)
Содержание слайда: Пример дружественной функции
#include <iostream>
using namespace std;
class myclass {
int a, b;
public:
friend int sum (myclass x);
void set_ab (int i, int j);
};
void myclass:: set_ab(int i, int j)
{
a = i;
b = j;
}
int sum (myclass x)
{
return x.a + x.b;
/* так как функция дружественная, она имеет прямой доступ к переменным a и b*/
}
int main()
{
myclass n;
n.set_ab(3,4);
cout << sum(n);
return 0;
}
№6 слайд
![Пример дружественного класса](/documents_6/c26965b2602a075947a7ddc3d861fb51/img5.jpg)
Содержание слайда: Пример дружественного класса
class myclass {
int a;
int b;
public:
myclass (int i, int j) { a = i; b = j; }
friend class Min;
};
class Min {
public:
int min (myclass x);
}
int Min:: min(myclass x)
{
return x.a < x.b ? x.a : x.b ;
}
/* класс Min имеет доступ к закрытым переменным a и b*/
int main()
{
myclass ob(10, 20);
Min m;
cout << m.min(ob);
return 0;
}
№7 слайд
![Подставляемые функции](/documents_6/c26965b2602a075947a7ddc3d861fb51/img6.jpg)
Содержание слайда: Подставляемые функции
Короткая функция, которая не вызывается, а подставляется в соответствующее место программы
Перед подставляемой функцией указывают ключевое слово inline
Подставляемые функции широко используются в классах
Использование подставляемых функций ускоряет работу программы, но увеличивает размер кода
Подставляемые функции должны быть маленькими
В некоторых случаях компилятор может проигнорировать подставляемые функции
Рекурсивные функции не могут быть подставляемыми
№8 слайд
![Пример подставляемой функции](/documents_6/c26965b2602a075947a7ddc3d861fb51/img7.jpg)
Содержание слайда: Пример подставляемой функции
inline int min(int a, int b)
{
return a < b ? a : b ;
}
int main()
{
cout << min(10, 20);
cout << “ “ << min(99, 88);
return 0;
}
С точки зрения компилятора эта программа выглядит
#include <iostream>
int main()
{
cout << min(10< 20? 10:20);
cout << “ “ << min(99< 88? 99:88);
return 0;
}
№9 слайд
![Пример подставляемой функции](/documents_6/c26965b2602a075947a7ddc3d861fb51/img8.jpg)
Содержание слайда: Пример подставляемой функции – члена класса
class myclass {
int a;
int b;
public:
void init (int i, int j);
void show();
};
inline void myclass :: init (int i, int j) { a = i; b = j; }
inline void myclass :: show() { cout << a << “ “ << b << “\n”; }
int main()
{ myclass x;
x.init(10,20)
x.show();
return 0;
}
№11 слайд
![Статические члены класса](/documents_6/c26965b2602a075947a7ddc3d861fb51/img10.jpg)
Содержание слайда: Статические члены класса
Данные (переменные) и методы класса могут быть статическими
Объявление статических переменных:
Перед объявлением переменной ставится ключевое слово static
Компилятор создает только один экземпляр статической переменной, который будет использоваться всеми объектами этого класса
Все статические переменные инициализируются нулем до создания первого объекта класса
№13 слайд
![Пример использования](/documents_6/c26965b2602a075947a7ddc3d861fb51/img12.jpg)
Содержание слайда: Пример использования статических переменных
class Int {
int x;
static int stvar;
public:
void set(int a, int b) {x=a; stvar=b;}
void show();
};
int Int::stvar;
void Int::show(){
cout << " x = " << x << "\n";
cout << " static var = " << stvar << "\n";
};
void main()
{
Int o1, o2;
cout << "object 1" << "\n";
o1.set(1,1);
o1.show();
cout << "object 2" << "\n";
o2.set(2,2);
o2.show();
cout << "object 1" << "\n";
o1.show();
system("pause");
}
№15 слайд
![Управление доступом к](/documents_6/c26965b2602a075947a7ddc3d861fb51/img14.jpg)
Содержание слайда: Управление доступом к ресурсам, которые совместно используются всеми объектами класса, с помощью статических переменных-членов класса
class cl {
static int resource;
public:
int get_resource();
void free_resource() { resource = 0;}
};
int cl::resource; // определяем ресурс
int cl::get_resource()
{
if (resource) return 0; // ресурс занят
else {
resource = 1;
return 1; // ресурс предоставлен объекту
}
}
void main()
{
cl o1, o2;
if (o1.get_resource()) cout << " object 1 has resource \n";
if (!o2.get_resource()) cout << " object 2 hasn't access \n";
o1.free_resource();
if (o2.get_resource()) cout << " object 2 can used resource \n";
system("pause");
}
№16 слайд
![Определение количества](/documents_6/c26965b2602a075947a7ddc3d861fb51/img15.jpg)
Содержание слайда: Определение количества существующих объектов класса
class Counter {
public:
static int count;
Counter () {count ++;}
~Counter () {count --;}
};
int Counter::count;
void f();
void main()
{
Counter o1;
cout << " objects " << Counter::count << "\n";
Counter o2;
cout << " objects " << Counter::count << "\n";
f();
cout << " objects " << Counter::count << "\n";
system("pause");
}
void f()
{
Counter temp;
cout << " objects " << Counter::count << "\n";
}
№17 слайд
![Статические методы класса](/documents_6/c26965b2602a075947a7ddc3d861fb51/img16.jpg)
Содержание слайда: Статические методы класса
Имеют прямой доступ только к другим статическим членам класса
Статический метод класса не имеет указатель this
Одна и та же функция не может иметь одновременно статическую и нестатическую версии
Статические функции не могут быть виртуальными
Статические функции нельзя объявлять с помощью ключевых слов const и volatile
№18 слайд
![Управление доступом к](/documents_6/c26965b2602a075947a7ddc3d861fb51/img17.jpg)
Содержание слайда: Управление доступом к ресурсам с помощью статических переменных-членов и методов класса
class cl {
static int resource;
public:
static int get_resource();
void free_resource() { resource = 0;}
};
int cl::resource; // определяем ресурс
int cl::get_resource()
{
if (resource) return 0; // ресурс занят
else {
resource = 1;
return 1; // ресурс предоставлен объекту
}
}
void main()
{
cl o1, o2;
if (cl::get_resource()) cout << " object 1 has resource \n";
if (!cl::get_resource()) cout << " object 2 hasn't access \n";
o1.free_resource();
if (o2.get_resource()) cout << " object 2 can used resource \n";
system("pause");
}
№19 слайд
![Задание Создайте класс с](/documents_6/c26965b2602a075947a7ddc3d861fb51/img18.jpg)
Содержание слайда: Задание
Создайте класс с именем ship, который будет содержать данные об учетном номере корабля и координатах его расположения. Разработайте метод, который будет сохранять данные о корабле, вводимые пользователем, и метод, выводящий данные о корабле на экран. Напишите функцию main(), создающую 5 объектов класса ship, а затем запрашивающую ввод пользователем информации о каждом из кораблей и выводящую на экран всю полученную информацию.
Для задания номера создайте класс, одно из полей которого хранит «порядковый номер» объекта. Для этого необходимо иметь еще одно поле, в которое будет записываться количество созданных объектов класса.
Каждый раз при создании нового объекта конструктор может получить значение этого поля и в соответствии с ним назначить объекту индивидуальный порядковый номер. В класс необходимо включить метод, который будет выводить на экран порядковый номер объекта.
Для хранения координат корабля используйте два поля типа angle, включающий три поля: int для числа градусов, типа float для числа минут и типа char для указания направления (N, S, E и W). Объект этого класса может содержать значение, как широты, так и долготы. Создайте метод, позволяющий ввести координату точки, направление, в котором она измеряется и метод, выводящий на экран значение этой координаты, например, 17959,9 E. Кроме того, напишите конструктор, принимающий эти три аргумента. Для вывода символа градусов воспользуйтесь символьной константой ‘\xF8’.
№20 слайд
![Задание на самостоятельную](/documents_6/c26965b2602a075947a7ddc3d861fb51/img19.jpg)
Содержание слайда: Задание на самостоятельную работу
Постановка задачи «Кошелек студента». Владелец кошелька может выполнить следующие действия с кошельком: добавить деньги в кошелек, взять деньги, пересчитать, посмотреть, дать деньги в долг. Источниками пополнения кошелька могут быть родители, также это может быть зарплата или стипендия.
Задание:
Добавить в разработанные классы задачи «Кошелек студента»:
Дружественные функции
Подставляемые функции
Статические переменные-члены класса
№22 слайд
![Пример использования](/documents_6/c26965b2602a075947a7ddc3d861fb51/img21.jpg)
Содержание слайда: Пример использования структуры вместо класса
struct mystr{
void buildstr(char *s); // открытый член
void showstr();
private:
char str[255];
};
void mystr::buildstr(char *s){
if (!*s) *str=‘\0’; // инициализация строки
else strcat(str,s);
}
void mystr::showstr() {
cout << str << \n ;
}
int main(){
mystr s;
s. buildstr();
s. buildstr(всем);
s. buildstr(привет!);
s. showstr();
return 0;
}
Класс mystr можно переписать:
сlass mystr{
char str[255];
public:
void buildstr(char *s); // открытый член
void showstr();
};
№23 слайд
![Связь между объединениями и](/documents_6/c26965b2602a075947a7ddc3d861fb51/img22.jpg)
Содержание слайда: Связь между объединениями и классами
В языке С++ объединения могут содержать не только данные, но
функции
конструкторы и деструкторы
Объединения могут сохранять все свойства языка С, их члены могут размещаться в одной и той же области памяти
Отличие: в языке С++ все члены объединения по умолчанию считаются открытыми, и полностью совместимы с языком С
Ограничения:
Объединения не могут использовать механизм наследования
Объединение не может служить базовым классом
Не может содержать: виртуальные функции; статистические переменные и ссылки; объекты классов, в которых перегружен оператор присваивания; объекты классов, в которых явно заданы конструктор и деструктор
№24 слайд
![Безымянные объединения Не](/documents_6/c26965b2602a075947a7ddc3d861fb51/img23.jpg)
Содержание слайда: Безымянные объединения
Не имеют типа и не могут образовывать объекты
Сообщают компилятору, что его члены хранятся в одной области памяти
Доступ к таким переменным осуществляется непосредственно, без помощи оператора ‘.’
int main(){
union {
long l;
double d;
};
l=100;
d=12.3;
cout << d<< “”;
return 0;
}
№26 слайд
![Контрольные вопросы В каких](/documents_6/c26965b2602a075947a7ddc3d861fb51/img25.jpg)
Содержание слайда: Контрольные вопросы
В каких случаях целесообразно использовать дружественные функции?
Какой принцип ООП нарушают дружественные функции?
Какие преимущества дает использование подставляемой функции?
Когда полезны статические переменные-члены класса?
В чем отличие структуры от класса?
Приведите пример использования структур?
Скачать все slide презентации Дружественные и подставляемые функции. Структуры, объединения в С одним архивом:
Похожие презентации
-
Структуры и объединения. Лекция 7
-
Дружественные классы и функции
-
Основы алгоритмизации и программирования. Структуры, объединения, перечисления
-
Классы, дружественные функции
-
Основы программирования C. Дружественные функции и перегрузка операторов. Лекция 8
-
Структуры и объединения данных. (Лекция 13)
-
Структурные и функциональные модели. Программирование, как моделирование
-
Технология программирования. Функции и структуры
-
Перечисления. Структуры. Объединения. Битовые поля
-
Функции: понятие, описание. Структура программы. Передача параметров и возврат значений