C++ Указатель на класс
Указатель на класс C++ похож на указатель на структуру. Чтобы получить доступ к членам через указатель на класс, необходимо использовать оператор доступа к членам->, так же как при доступе через указатель на структуру. Как и все указатели, указатель необходимо инициализировать перед использованием.
В C++ указатель на класс указывает на объект класса. Как и обычные указатели, указатель на класс можно использовать для доступа к переменным-членам и функциям-членам объекта.
Объявление и инициализация указателей на классы
Пример
class MyClass {
public:
int data;
void display() {
std::cout << "Data: " << data << std::endl;
}
};
int main() {
// Создать объект класса
MyClass obj;
obj.data = 42;
// Объявление и инициализация указателя на класс
MyClass *ptr = &obj;
// Доступ к переменным-членам через указатель
std::cout << "Данные через указатель: " << ptr->data << std::endl;
// Вызов функции-члена через указатель
ptr->display();
return 0;
}
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Data via pointer: 42 Data: 42
Динамическое выделение памяти
Указатель на класс также можно использовать для динамического выделения памяти для создания объекта класса:
Пример
class MyClass {
public:
int data;
void display() {
std::cout << "Data: " << data << std::endl;
}
};
int main() {
// Динамическое выделение памяти для создания объекта класса
MyClass *ptr = new MyClass;
ptr->data = 42;
// Вызов функции-члена через указатель
ptr->display();
// Освобождение динамически выделенной памяти
delete ptr;
return 0;
}
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Data: 42
Указатели на классы как параметры функций
Указатель на класс можно передать в качестве параметра функции:
Пример
class MyClass {
public:
int data;
void display() {
std::cout << "Data: " << data << std::endl;
}
};
// Функция принимает указатель на класс в качестве параметра
void processObject(MyClass *ptr) {
ptr->display();
}
int main() {
MyClass obj;
obj.data = 42;
// Передать указатель на класс функции
processObject(&obj);
return 0;
}
Пример
Следующий пример помогает лучше понять концепцию указателей на классы:
Пример
using namespace std;
class Box
{
public:
// Определение конструктора
Box(double l=2.0, double b=2.0, double h=2.0)
{
cout <<"Конструктор вызван." << endl;
length = l;
breadth = b;
height = h;
}
double Volume()
{
return length * breadth * height;
}
private:
double length; // Длина коробки
double breadth; // Ширина коробки
double height; // Высота коробки
};
int main(void)
{
Box Box1(3.3, 1.2, 1.5); // Объявить box1
Box Box2(8.5, 6.0, 2.0); // Объявить box2
Box *ptrBox; // Объявить указатель на класс.
// Сохранить адрес первого объекта
ptrBox = &Box1;
// Теперь попробуйте использовать оператор доступа к членам для доступа к членам
cout << "Объём Box1: " << ptrBox->Volume() << endl;
// Сохраните адрес второго объекта
ptrBox = &Box2;
// Теперь попробуйте использовать оператор доступа к членам для доступа к членам
cout << "Объём Box2: " << ptrBox->Volume() << endl;
return 0;
}
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Constructor called. Constructor called. Volume of Box1: 5.94 Volume of Box2: 102Другие расширения