Середа, 09.07.2025
Все про все



Хочу заказать чертеж или деталь в Компас 3D.




Группа ВК
Меню сайту
Форма входу
Категорії розділу
C++ [10]
C [6]
Вміст сайту
Коментарі: 28
Форум: 2/2
Фото: 109
Блог: 69
Новини: 9
Файли: 18
Тексти: 664
Сайти: 2
Дошка оголошень: 9
Відео: 14
Гостьова книга: 4
Теги
c++ (10)
nod 32 (4)
Заробіток
//wmlink.ru/index.php?ref=240844
Головна » Статті » Програмування » C++

Поділися матеріалом в соц. мережах
Якщо вам не важко, можете прийняти участь в цьому опитуванні =)
Ви ХТО ?
Всего ответов: 466
RUS Уроки по программированию на языке С++ (Указатели на объекты.)

Указатели на объекты.

До сих пор доступ к членам объекта осуществлялся, c использованием операции ".". Это правильно, если вы работаете с объектом. Однако доступ к членам объекта можно осуществлять и через указатель на объект. В этом случае обычно применяется операция стрелка "->". Похоже на структуру, не правда ли?

Указатель на объект объявляется точно так же, как и указатель на переменную любого типа. А, для получения адреса объекта, перед ним необходим оператор &.

# include <iostream>
using namespace std;

class _3D 
{
 double x, y, z;
public:
 _3D ();
 _3D (double initX, double initY, double initZ);
 void Show(){
 cout<<x<<" "<<y<<z<<"\n";
 }
};

// конструктор класса _3D с параметрами
_3D::_3D(double initX, double initY, double initZ)
{
 x = initX;
 y = initY;
 z = initZ;
 cout << "\nWhis arguments!!!\n"; 
}

// конструктор класса _3D без параметров
_3D::_3D()
{
 x=y=z=0;
 cout << "\nNo arguments!!!\n"; 
}



void main()
{
 // создается объект A, вызывается
 // конструктор c параметрами
 // все члены класса инициализируются 
 // соответствующими переменными
 // на экране надпись "Whis arguments!!!"
 _3D A (3,4,0);

 // создается указатель на объект типа
 // _3D и в этот указатель записывается
 // адрес объекта А 
 _3D*PA=&A;

 // через указатель вызывается функция
 // Show()
 PA->Show();
}
Динамическое выделение памяти под объект.

Если класс имеет конструктор без аргументов, то обращение к операции new полностью совпадает с тем, что используется для выделения памяти под обычные типы данных без инициализирующего выражения.

# include <iostream>
using namespace std;

class Point 
{
 double x, y;
public:
 Point(){
 x=y=0;
 cout << "\nNo arguments!!!\n"; 
 }
 void Show(){
 cout<<x<<" "<<y<<"\n";
 }
};

void main()
{
 // создание объекта
 Point A;
 // показ содержимого на экран
 A.Show();

 cout<<"****************************";
 // создание указателя на объект
 Point*PA;

 // Динамическое выделение памяти под один
 // объект типа Point
 PA=new Point;

 // проверка, выделилась ли память
 // и выход, если не выделилась
 if(!PA) exit(0);

 // через указатель вызывается функция
 // Show()
 PA->Show();

 cout<<"****************************";
 // создание указателя на объект
 Point*PB;

 // Динамическое выделение памяти под массив
 // объектов типа Point
 PB=new Point[10];
 
 // проверка, выделилась ли память
 // и выход, если не выделилась
 if(!PВ) exit(0);

 // Вызов функции Show() для каждого элемента
 // массива PB 
 for(int i=0;i<10;i++){
 PB[0].Show(); 
 }
 
 // Удаление объекта РА
 delete PA;

 // Удаление массива РB
 delete[]PB; 
 
}

Если же конструктор класса имеет аргументы, то список аргументов помещается там же, где при работе со стандартными типами данных находится инициализирующее выражение.

# include <iostream>
using namespace std;

class Point 
{
 double x, y;
public:
 // конструктор с параметрами
 // по умолчанию
 Point(double iX=1,double iY=1){
 x=iX;
 y=iY;
 cout << "\nWhis arguments!!!\n"; 
 }
 void Show(){
 cout<<x<<" "<<y<<"\n";
 }
};

void main()
{
 // создание объекта
 Point A(2,3);
 // показ содержимого на экран
 A.Show();

 cout<<"****************************";
 // создание указателя на объект
 Point*PA;

 // Динамическое выделение памяти под один
 // объект типа Point
 // в круглых скобках - параметры для конструктора
 PA=new Point(4,5);

 // проверка, выделилась ли память
 // и выход, если не выделилась
 if(!PA) exit(0);

 // через указатель вызывается функция
 // Show()
 PA->Show();

 cout<<"****************************";
 // создание указателя на объект
 Point*PB;

 // Динамическое выделение памяти под массив
 // объектов типа Point
 // параметры не передаются 
 // используются параметры
 // конструктора по умолчанию
 PB=new Point[10];

 // проверка, выделилась ли память
 // и выход, если не выделилась
 if(!PB) exit(0);

 // Вызов функции Show() для каждого элемента
 // массива PB 
 for(int i=0;i<10;i++){
 PB[0].Show(); 
 }

 // Удаление объекта РА
 delete PA;

 // Удаление массива РB
 delete[]PB; 

}
Примечание: Обратите внимания, что в данном примере использован конструктор с параметрами по умолчанию. Это связано с тем, что при динамическом выделении памяти под массив объектов НЕВОЗМОЖНО передать параметры в конструктор. В нашем примере мы этого и не делаем. Для массива объектов используются параметры по умолчанию. Эту проблему можно было решить иначе, создав конструктор без параметров.
Статические массивы.

В отличие от динамики, при создании статического массива параметры в конструктор передать можно. Рассмотрим синтаксис этого действия на примере:

# include <iostream>
using namespace std;

class Point 
{
 double x, y;
public:
 //конструктор с параметрами
 Point(double iX,double iY){
 x=iX;
 y=iY;
 cout << "\nWhis arguments!!!\n"; 
 }
 void Show(){
 cout<<x<<" "<<y<<"\n";
 }
};

void main()
{
 // создание массива объектов
 // передача параметров в конструктор
 Point AR[2]={Point(2,3),Point(4,5)};

 // Вызов функции Show() для каждого элемента
 // массива AR 
 for(int i=0;i<2;i++){
 AR[i].Show(); 
 }


}

Категорія: C++ | Додав: DEN-SHP (15.08.2013)
Переглядів: 807 | Теги: c++ | Рейтинг: 0.0/0
Поділися матеріалом в соц. мережах
Всього коментарів: 0
Додавати коментарі можуть лише зареєстровані користувачі.
[ Реєстрація | Вхід ]
Пошук
Реклама
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0

Проверка тиц pr счетчик посещений Яндекс.Метрика
Copyright DEN-SHP © 2025
Безкоштовний конструктор сайтів - uCozЯндекс.Метрика