Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> спецификатор доступа 
:(
    Опции темы
rukudias
Дата 1.4.2009, 01:20 (ссылка)   | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 28.2.2007

Репутация: 0
Всего: 0



Привет Всем!
Забавно не правдали?
Код

#include <iostream>
using namespace std;
class A
{
public :
    virtual void fun1()=0;
};
class B:public A
{
private:
    void fun1()
    {
    }
};
void testFun(A*ptr)
{
    ptr->fun1();
}
void main()
{
    B obj;
    //obj.fun1();
    testFun(&obj);
}

PM MAIL   Вверх
zim22
Дата 1.4.2009, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(rukudias @  1.4.2009,  01:20 Найти цитируемый пост)
Забавно не правдали?

Ааааа, забавно то как! Будут ещё забавы - кидай на форум!


--------------------
PM MAIL   Вверх
Andrey44
Дата 1.4.2009, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



smile А что забавного-то?

Добавлено через 3 минуты и 47 секунд
Код

testFun(dynamic_cast<A*>(&obj));//так вроде-бы лучше



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Anikmar
Дата 1.4.2009, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Изучаем работу виртуальных методов?
Цитата(Andrey44 @  1.4.2009,  07:25 Найти цитируемый пост)
testFun(dynamic_cast<A*>(&obj));//так вроде-бы лучше

Не. Тогда вся прелесть уйдет.
PM MAIL ICQ   Вверх
mes
Дата 1.4.2009, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(rukudias @  1.4.2009,  00:20 Найти цитируемый пост)
Забавно не правда ли?

из разряда "сами себя обманули". Ничего удивительно в вашем примере не происходит,
 также каки в нижеприведенном, в котором объект изменяется в методе "помеченным" const. smile
Код

class A 
{
   public:
    A(int i) : m_i(i) {}
    int Get(A& a) const
    {
       ++a.m_i;
       return m_i;
    }
  private:
    int m_i;
};
...
A a(5); std::cout <<a.Get(a);


Что написали то и получили smile

Это сообщение отредактировал(а) mes - 1.4.2009, 15:45


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 1.4.2009, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



rukudias забавляйся smile у чисто виртуальной функции есть body, и мало того, она еще и вызывается smile 
Код

class A
{
public :
    virtual ~A() = 0
    {
        std::cout << "A::~A()" << std::endl;
    };
};
class B: public A
{
public:
    virtual ~B()
    {
        std::cout << "B::~B()" << std::endl;
    };
    
};

Цитата

Что написали то и получили 


 smile в программировании мистики не бывает smile 

Это сообщение отредактировал(а) azesmcar - 1.4.2009, 16:06
PM   Вверх
mes
Дата 1.4.2009, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(azesmcar @  1.4.2009,  15:04 Найти цитируемый пост)
    virtual ~A() = 0
    {
        std::cout << "A::~A()" << std::endl;
    };

такое (на нормальном компиляторе) не откомпилится.. "обнуление" и тело функции нужно "разделить" (вынести тело из описания класса)smile


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 1.4.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата

такое (на нормальном компиляторе) не откомпилится.. "обнуление" и тело функции нужно "разделить" (вынести тело из описания класса)smile 

 smile это так, для демонстрации..
Цитата

(на нормальном компиляторе)

все понял..студию 2008 вычеркиваю из списка нормальных компиляторов  smile 
PM   Вверх
mes
Дата 1.4.2009, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(azesmcar @  1.4.2009,  17:24 Найти цитируемый пост)
все понял..студию 2008 вычеркиваю из списка нормальных компиляторов  smile  

не понял, серьезно ли Вы или с намеком smile
если с намеком то :

Цитата(Standart 10.4/2)

...
[Note: a function declaration cannot  provide  both  a
  pure-specifier and a definition. For example,
          struct C {
                  virtual void f() { }=0; // ill-formed
          };
   --end note]

 smile 



--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 1.4.2009, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата

[Note: a function declaration cannot  provide  both  a
  pure-specifier and a definition. For example,
          struct C {
                  virtual void f() { }=0; // ill-formed
          };
   --end note]

я ведь не возражал..но студия в самом деле компилирует этот код..хотя признаюсь я не удивлен.

Добавлено через 1 минуту и 36 секунд
mes раньше у них не работало то что должно было, теперь работает то что не должно..посмотрим что будет дальше smile 
PM   Вверх
zim22
Дата 1.4.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



mes, я помню вопрос был на собеседовании: может ли чистая виртуальная функция иметь тело и если да, то зачем оно ей надо?
и ответ был: да, может. а зачем надо - я не помню smile

Цитата(mes @  1.4.2009,  19:38 Найти цитируемый пост)
virtual void f() { }=0; // ill-formed

может так? virtual void f() = 0 { }



--------------------
PM MAIL   Вверх
mes
Дата 1.4.2009, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(zim22 @  1.4.2009,  19:15 Найти цитируемый пост)
и ответ был: да, может.

 smile 

Цитата(zim22 @  1.4.2009,  19:15 Найти цитируемый пост)
может так? virtual void f() = 0 { }

 smile, вот так :
Код

class A
{
    public :
         virtual ~A() = 0;
};
А::~A()
{
        std::cout << "A::~A()" << std::endl;
};



Это сообщение отредактировал(а) mes - 1.4.2009, 21:11


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 1.4.2009, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата

а зачем надо - я не помню

Для деструкторов и надо..поскольку тело деструктора пустым быть не может
PM   Вверх
zim22
Дата 1.4.2009, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(azesmcar @  1.4.2009,  21:12 Найти цитируемый пост)
Для деструкторов и надо..поскольку тело деструктора пустым быть не может

это проясняет дело, а то я код наваял, а толку от его чистой виртуальной функции с телом НОЛЬ.
Код
#include <iostream>

struct Foo {
  virtual void fcn() = 0 { std::cout << "Foo::fcn"; }  
};

struct Bar : Foo {
  virtual void fcn() { Foo::fcn(); }
};

int main()
{
  Foo *f = new Bar;  
  f->fcn();
  delete f;
  
    return 0;
}




--------------------
PM MAIL   Вверх
Fazil6
Дата 2.4.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(rukudias @  1.4.2009,  01:20 Найти цитируемый пост)
Забавно не правдали?

неправда

Добавлено через 3 минуты и 43 секунды
Цитата(Andrey44 @  1.4.2009,  07:25 Найти цитируемый пост)
testFun(dynamic_cast<A*>(&obj));//так вроде-бы лучше

вот это действительно забавно... придет же такое в голову...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1013 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.