|
|
|
Указатели
|
|||
|---|---|---|---|
|
#18+
Господа, есть такой вопросик. вот начал я осваивать С++, разобрался в указателях, как их используют. непонятно КОГДА надо использовать указатели? т.е как узнать что вот именно в этом месте пр-мы лучше делать через указатели? а если не сложно, приведите, плиз, примерчик кода без указателей и этот же пример с указателями. заранее списибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2006, 06:49 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
Указатели лучше всего использовать когда довольно большие данные (типа структуры и т.д.) передаются как параметры в фукция, без использования указателей при этом пришлось-бы копировать все данные, что не есть благо. Так-же они незаменимы при создании различного рода связных списков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2006, 08:44 |
|
||
|
Указатели
|
|||
|---|---|---|---|
|
#18+
Указатели необходимы не только при передачи в функции. Кстати, передавать в функции параметры можно и по ссылкам и в некоторых случаях это более предпочтительно (хотя все дело в том, кто как привык писать, при использовании указателей, его необходимо разыменовывать и т.д.). Вся прелесть указателей (впрочем это справедливо и для ссылок) проявляется когда необходимо использовать виртуальные методы. Вот тогда без них не обойтись. Примерный код таков. 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 мы не можем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2006, 13:29 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33610359&tid=2031728]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
153ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 461ms |

| 0 / 0 |
