Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2015, 23:37   #11
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Согласно моим скромным знаниям нужно сделать так:
NULL - пережиток Си. В плюсах же 0. А начиная с c++11 - nullptr
Croessmah вне форума Ответить с цитированием
Старый 30.09.2015, 16:58   #12
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

не могу понять почему нету ошибки от компилятора ?

обратите внимание где стоит func_3() в классе А и где func_1()

компилятор же тут {func_1();} ничего не знает про func_1()

Код:
class A 
{
public:
	void func_3() {func_1();}
	virtual void func_1()
	 {cout<<")))))))))))))))))))";}
};

class B : public A
{
public:
	virtual void func_1() 
	 {cout<<"((((((((((((((((((((";}
};

int main()
{
	B b;
	b.func_3();
	return 0;
}

это из -за virtual вместо )))))))))))))))))) получаю ((((((((((((((( ?
RAFA91 вне форума Ответить с цитированием
Старый 30.09.2015, 17:08   #13
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
обратите внимание где стоит func_3() в классе А и где func_1()

компилятор же тут {func_1();} ничего не знает про func_1()
Почему? Тут же тип класс, а не отдельная функция...

Цитата:
это из -за virtual вместо )))))))))))))))))) получаю ((((((((((((((( ?
Могу подкинуть еще вариант: у вас в классе В есть и func_3 и func_1, и они могут друг друга вызывать...
p51x вне форума Ответить с цитированием
Старый 30.09.2015, 17:26   #14
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение

Могу подкинуть еще вариант: у вас в классе В есть и func_3 и func_1, и они могут друг друга вызывать...
а так уже нельзя


Код:
class A 
{
public:
	void func_3() {func_1();}
	
};

class B : public A
{
public:
	void func_1() 
	 {cout<<"((((((((((((((((((((";}
};
RAFA91 вне форума Ответить с цитированием
Старый 30.09.2015, 17:34   #15
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
а так уже нельзя
Так в классе A нет функции-члена с именем func_1.
Croessmah вне форума Ответить с цитированием
Старый 30.09.2015, 17:35   #16
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

ну а чего вы хотели? у вас тип класс А недоопределен, он не скомпилился
p51x вне форума Ответить с цитированием
Старый 01.10.2015, 12:11   #17
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Мне вот интересно как в данном случае работает механизм полиморфизма если он тут присутствует.

1. создаю обьект класса С

2. вызываю func_3() которая присутствует в классе А

3. в функции func_3() указатель this имеет тип А

4. вызываю this->func_1();

5. вызывается func_1() класса C а не А.

Вопрос: это происходит за счет виртуальности функции func_1() ?

Код:
class A 
{
public:
	void func_3() {this->func_1();}
	virtual void func_1() {cout<<")))))))))))))))))))"<<endl; }
};
class B : public A
{
public:
	virtual void func_1() {cout<<"((((((((((("<<endl;}
};
class C : public B
{
public:
	virtual void func_1() {cout<<"((((((()))))))))))))"<<endl; }
};

int main()
{
	C b;
	b.func_3();
	return 0;
}
RAFA91 вне форума Ответить с цитированием
Старый 01.10.2015, 12:23   #18
Gekan
Пользователь
 
Регистрация: 29.06.2012
Сообщений: 39
По умолчанию

this это указатель на объект, для которого был вызван метод. Метод func_3() был вызван для объекта класса С.
Gekan вне форума Ответить с цитированием
Старый 01.10.2015, 12:41   #19
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

5. вызывается func_1() класса C а не А.

Вопрос: это происходит за счет виртуальности функции func_1() ?
RAFA91 вне форума Ответить с цитированием
Старый 01.10.2015, 12:48   #20
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Нет. Это происходит потому что
Цитата:
this это указатель на объект, для которого был вызван метод
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибки при компиляции с++ *Fantom* Помощь студентам 1 29.10.2013 08:37
Почему на Linux вирусов нету, а на Android есть? Ale}{ander Общие вопросы по программированию, компьютерный форум 13 06.09.2013 20:00
Unity 3D почему в инспекторе нету FBXimporter SevenXP Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 22.10.2012 21:18
ошибки компиляции KOLANICH Общие вопросы C/C++ 0 25.02.2012 17:14
Ошибки после компиляции Cakeinpanic Общие вопросы C/C++ 8 16.05.2009 14:48