Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
#1

Не работает virtual - C++

14.06.2010, 14:33. Просмотров 889. Ответов 11
Метки нет (Все метки)

Вот написал пробный код, он не срабатывает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;
 
class A{
public:
virtual int c();
    int a;
    
    
};
 
class B:public A{
public:
    int c() {return 4;}
};
 
 
 
int main()
{
    setlocale(0,"");
    cout<<"Привет Ромео!";
    B *ob = new B;
    ob->c();
    cin.get();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2010, 14:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает virtual (C++):

Protected abstract virtual base pure virtual private destructor - C++
Хай, all) Вопрос не для начинающих и дурацкий) В разделе для экспертов публиковать не стал, чтобы не засорять его) Наткнулся тут на...

Virtual Protect - C++
Хочу установить защиту на весь регион памяти dll , но нечего не выходит , при просмотре через редактор памяти , атрибуты те же остаются ,...

virtual ~Function(); virtual function(); - C++
Что такого дает приставка virtual: функциям деструкторам и class? В Википедии написано,что если деструктор не виртуальный это может...

Virtual метод - C++
Приветствую. Собственно интересует вопрос следующего характера, а именно (возможно при изучении пропустил данный момент) VMT: Допустим...

Virtual метод - C++
Разбираю основы С++. Застрял на понятии virtual. Во всех источниках написано что это все сделано чтобы потомок родительского класса мог...

тупняк с virtual :) - C++
Здравствуйте. пытаюсь прикрутить икслючения к своему &quot;модулю&quot;, и натыкаюсь на ругань компилятора: error: expected unqualified-id before...

11
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
14.06.2010, 14:43 #2
Вот так работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
class A{
public:
    virtual int c() = 0;
        int a;      
};
 
class B:public A{
public:
        int c() {return 4;}
};
  
int main()
{
        setlocale(0,"");
        
        B *ob = new B;
        cout<<"Привет Ромео!" << " + " << ob->c(); 
        cin.get();
}
1
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
14.06.2010, 14:54 #3
Syltan,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
 
class A
{
public:
    virtual void print()
    {
        std::cout << "HELLO WORLD" << std::endl;
    }
};
 
class B : public A
{
public:
    void print()
    {
        std::cout << "BYE WORLD" << std::endl;
    }
};
 
int main()
{
    A *ptr = new A;
    ptr->print();
    delete ptr;
    ptr = new B;
    ptr->print();
    delete ptr;
    return 0;
}
1
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
14.06.2010, 15:04  [ТС] #4
Попробовал написать ещё такой код, о нне срабатывает.
Код
#include <iostream>
using namespace std;

class A{
	
public: 
virtual int c()=0;
	int a;
	void sad() {cout<<"Hello Russia";}
};

class B:public A{
	
public: 
	int c() {return 4;}
void sad() {cout<<"Hello!";}
};

int main()
{
	setlocale(0,"");
	B *ob = new B;
	cout<<ob->c()<<endl;
	ob->sad();
	A * ob10 = new A;
	ob10->sad();
	cin.get();
}
0
][акер
#define книжный_червь Я
182 / 93 / 6
Регистрация: 30.01.2010
Сообщений: 780
14.06.2010, 17:29 #5
C++
1
virtual int c()=0;
Ты знаешь чё это означает? Это ЧИСТАЯ ВИРТУАЛЬНАЯ функция. Если в классе хоть одна чистая виртуальная функция, то нельзя будет вызывать все функции и нельзя будет обращаться к данным! Хочешь чтобы работало? Напиши вместо этого вот это:
C++
1
virtual int c();
0
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
14.06.2010, 17:32 #6
][акер, и че ты написал ? чистая виртуальная функция лишь запрещает создание объектов абстрактного класса, всё у него в коде работает.
0
][акер
#define книжный_червь Я
182 / 93 / 6
Регистрация: 30.01.2010
Сообщений: 780
14.06.2010, 17:34 #7
C++
1
2
A * ob10 = new A; // Выделяет память объекту. ОШИБКА!
 ob10->sad(); // Тоже ошибка!
0
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
14.06.2010, 17:50 #8
][акер, xD я про код Mr.X вобще ))
0
rrrFer
Заблокирован
14.06.2010, 18:12 #9
Цитата Сообщение от ][акер Посмотреть сообщение
C++
1
2
A * ob10 = new A; // Выделяет память объекту. ОШИБКА!
 ob10->sad(); // Тоже ошибка!
вторая ошибка из-за того что обьект ob10 не был создан, а написал он нормально вроде бы, только зачем то пытается в main создать обьект абстрактного класса.
Попробуй так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main(){
 
        setlocale(0,"");
 
        B *ob = new B;
        ob->sad();
        cout<<endl;
        A * ob10 = new B;
        ob10->sad();
 
        cin.get();
}
0
][акер
#define книжный_червь Я
182 / 93 / 6
Регистрация: 30.01.2010
Сообщений: 780
14.06.2010, 18:14 #10
Цитата Сообщение от rrrFer Посмотреть сообщение
A * ob10 = new B; ob10->sad();
Получится, но только выведет "Hello", а не "Hello Russia", как Syltan хочет.
0
rrrFer
Заблокирован
14.06.2010, 18:47 #11
][акер, проверь сначала

Добавлено через 3 минуты
и перечитай пост от Андрейка
0
][акер
#define книжный_червь Я
182 / 93 / 6
Регистрация: 30.01.2010
Сообщений: 780
14.06.2010, 19:04 #12
А блин! Это же не виртуальная функция! Не заметил! Извиняюсь!
1
14.06.2010, 19:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2010, 19:04
Привет! Вот еще темы с ответами:

virtual функции - C++
я как-то пропустил лекцию по этой теме, и теперь совсем не понимаю назначение этих функций. может кто поделиться ссылкой и нормальными...

Virtual и noreturn - C++
Возможно ли подружить virtual и noreturn? Пишу: struct test { int func(){error();} ]virtual void error(){throw 0;} }; ...

Virtual friend function - C++
&lt;&lt;Виртуальный метод не может объявляться с модификатором static, но может быть объявлен как дружественная функция.&gt;&gt; Виртуальный метод...

Ошибка: templates may not be 'virtual' - C++
Здравствуйте форумчане. Какими способами можно избежать этой ошибки? ошибка: templates may not be 'virtual' class IObject { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru