powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Указатели
4 сообщений из 4, страница 1 из 1
Указатели
    #33610176
www-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, есть такой вопросик. вот начал я осваивать С++, разобрался в указателях, как их используют. непонятно КОГДА надо использовать указатели? т.е как узнать что вот именно в этом месте пр-мы лучше делать через указатели?
а если не сложно, приведите, плиз, примерчик кода без указателей и этот же пример с указателями.
заранее списибо!
...
Рейтинг: 0 / 0
Указатели
    #33610189
IcyCool
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Указатели лучше всего использовать когда довольно большие данные (типа структуры и т.д.) передаются как параметры в фукция, без использования указателей при этом пришлось-бы копировать все данные, что не есть благо.

Так-же они незаменимы при создании различного рода связных списков
...
Рейтинг: 0 / 0
Указатели
    #33610295
Homosum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Указатели необходимы не только при передачи в функции. Кстати, передавать в функции параметры можно и по ссылкам и в некоторых случаях это более предпочтительно (хотя все дело в том, кто как привык писать, при использовании указателей, его необходимо разыменовывать и т.д.).
Вся прелесть указателей (впрочем это справедливо и для ссылок) проявляется когда необходимо использовать виртуальные методы. Вот тогда без них не обойтись. Примерный код таков.

class Animal
{
virtual void Speak();
};

void Animal::Speak()
{
cout<<"Здесь зверь должен произосить звуки"<<endl;
}


class Cat:public Animal
{
virtual void Speak();
}

void Cat::Speak()
{
cout<<"Мяу!"<<endl;
}


class Dog:public Animal
{
virtual void Speak();
}

void Dog::Speak()
{
cout<<Гав!"<<endl;
}


Так вот укзатели позволяют определить указатель на базовый класс, но объект создать класса потомка (в нашем случае это Cat и Dog), причем если будем вызывать метод Speak(), класса Animal, в случае с динамическими объектами, будет вызыватся тот метод, который определен в классе потомке.

Например

Animal * Nursling;

Nursling = new Cat;

Nursling->Speak();//Здесь будет напечатано "Мяу!", т.е. был вызван метод класса Cat

delete Nursling;

Nursling = new Dog;

Nursling->Speak();//Здесь будет напечатано "Гав!", т.е. был вызван метод класса Dog

delete Nursling;

Только не надо забывать освобождать память и не забывать не вызывать delete для указателя, у которого нет объекта.


С объектами, размещенными в стеке, мы такого сделать не можем.

Animal Nursling;

Nursling->Speak();//"Здесь зверь должен произосить звуки"
И связать переменную с классом Cat или Dog мы не можем.
...
Рейтинг: 0 / 0
Указатели
    #33610359
www-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ага, понял, спасибо!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Указатели
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]