LINUX.ORG.RU

C++ как обратиться к методу базового класса?


0

0

В общем ситуация:

class A {
public:
  virtual void method1() {
    cerr<<"Это метод 1 у A"<<endl;
  }
};

class B {
public:
  virtual void method1() {
    cerr<<Это метод 1 у B, сейчас вызовем метод 1 у A<<endl;
    A::method1();
  }
};

B b;
b.method1();


в результате хотелось бы видеть на экране

Это метод 1 у B, сейчас вызовем метод 1 у A
Это метод 1 у A


возможно ли? и если возможно, то как?

спасибо.


Перемещено JB из Talks

Перемещено JB из Development
★★★★★

упс, прошу прощения, зря побеспокоил, похоже, именно так как я написал, так и надо писать )

JB оперативен, конечно :)

AndreyKl ★★★★★
() автор топика

Ога, а теперь попробуй:

A b;
b.method1();

не собирается. Потому, что B не является производным от класса A, и все твои virtual бесмысленны, поэтому:

class B: public A {
public:
...

anonymous
()
Ответ на: комментарий от anonymous

anonymous накурился и гонит :D

соберется, конечно-же, потому как сигнатуры методов одинаковые.

Вот так вот не соберется:

A *b = new B(); b->method1();

anonymous
()

в общем, гляжу много знатоков C++ собралось :)

простите за беспокойство ещё раз.

поясню ситуацию:

код который я набросал - никогда не компилировался, это просто пояснение ситуации, ясное дело я забыл : public, но и без него меня прекрасно поняли. Я с с++ не на короткой ноге, в инете порылся, на вскидку не нашёл, попробовал написать parent::method1() и ещё несколько вариантов.. потом решил спросить здесь. Как только запостил сообщение - понял, что как раз так как я написал я и не попробовал. Попробовал - заработало, о чём и сообщил в следующем посте. Всем спасибо, тему можно считать закрытой.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от AndreyKl

хотя оба анонимуса гонят. Как же он вызовет A::method1() из б? ведь метод 1 не объявлен как статический. Вот если virtual заменить на static, то всё работает.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от AndreyKl

Брат мой Андрей! Молю тебя, почитай какую-нибудь умную книжку или тьюториал какой-нибудь... Шож ты алхимией занимаешься, работает-не работает...

Uncle_Theodore ★★
()
Ответ на: комментарий от Uncle_Theodore

Дядя теодор, я умную (несколько умных) книжек конкретно по c++ читал около 6 лет назад, в бытность мою студентом. С тех пор много воды утекло и с с++ я как-то не встречался со времён первой своей работы, и хотя синтаксис у каждого языка свой, концепции объектно-ориентированного программирования, что в Java, что в С++, что в smalltalk что в php(прости меня патрик :), что в ruby остаются одинаковыми. А по синтаксису, если срочно, то и спросить не такой уж страшный грех и святой инквизицией вроде не карается пока..

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от Uncle_Theodore

в общем читать не вижу смысла.. через неделю навык владения языком почти полностью восстановится, а на умную книжку уйдёт около месяца. Да и фиг бы с ним, но ничего нового я не узнаю, поскольку всё(по теме с++ для новичков, для профи, страуструп, дейтл и дейтл ) уже прочитано.

AndreyKl ★★★★★
() автор топика
Ответ на: комментарий от LamerOk

> Если б вы, ребят, еще и английскую транслитерацию его имени дали, цены бы вам не было. ))

Nicolai M. Josuttis

А вот книга. http://www.amazon.com/Object-Oriented-Programming-Nicolai-Josuttis/dp/0470843993

Я ее рекомендовать не буду, но думаю, народ говорит именно про нее.

Uncle_Theodore ★★
()
Ответ на: комментарий от Uncle_Theodore

Народ, кстати, говорит вот про эту:

Addison-Wesley. The C++ Standard Library - A Tutorial and Reference

LamerOk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.