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

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

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

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

14.06.2010, 14:33. Просмотров 846. Ответов 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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2010, 14:33     Не работает virtual
Посмотрите здесь:

тупняк с virtual :) C++
C++ Ключевое слово virtual
virtual ~Function(); virtual function(); C++
virtual функции C++
virtual методы и template C++
virtual void execute()=0 C++
C++ Virtual Protect
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
3040 / 1685 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
14.06.2010, 14:43     Не работает virtual #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();
}
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
14.06.2010, 14:54     Не работает virtual #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;
}
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
14.06.2010, 15:04  [ТС]     Не работает virtual #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();
}
][акер
#define книжный_червь Я
182 / 93 / 6
Регистрация: 30.01.2010
Сообщений: 780
14.06.2010, 17:29     Не работает virtual #5
C++
1
virtual int c()=0;
Ты знаешь чё это означает? Это ЧИСТАЯ ВИРТУАЛЬНАЯ функция. Если в классе хоть одна чистая виртуальная функция, то нельзя будет вызывать все функции и нельзя будет обращаться к данным! Хочешь чтобы работало? Напиши вместо этого вот это:
C++
1
virtual int c();
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
14.06.2010, 17:32     Не работает virtual #6
][акер, и че ты написал ? чистая виртуальная функция лишь запрещает создание объектов абстрактного класса, всё у него в коде работает.
][акер
#define книжный_червь Я
182 / 93 / 6
Регистрация: 30.01.2010
Сообщений: 780
14.06.2010, 17:34     Не работает virtual #7
C++
1
2
A * ob10 = new A; // Выделяет память объекту. ОШИБКА!
 ob10->sad(); // Тоже ошибка!
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
14.06.2010, 17:50     Не работает virtual #8
][акер, xD я про код Mr.X вобще ))
rrrFer
Заблокирован
14.06.2010, 18:12     Не работает virtual #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();
}
][акер
#define книжный_червь Я
182 / 93 / 6
Регистрация: 30.01.2010
Сообщений: 780
14.06.2010, 18:14     Не работает virtual #10
Цитата Сообщение от rrrFer Посмотреть сообщение
A * ob10 = new B; ob10->sad();
Получится, но только выведет "Hello", а не "Hello Russia", как Syltan хочет.
rrrFer
Заблокирован
14.06.2010, 18:47     Не работает virtual #11
][акер, проверь сначала

Добавлено через 3 минуты
и перечитай пост от Андрейка
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2010, 19:04     Не работает virtual
Еще ссылки по теме:

Возвращаемое значение virtual функции C++
Virtual и noreturn C++
Protected abstract virtual base pure virtual private destructor C++
C++ Ошибка: templates may not be 'virtual'
Чем отличается override от virtual? C++

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

Или воспользуйтесь поиском по форуму:
][акер
#define книжный_червь Я
182 / 93 / 6
Регистрация: 30.01.2010
Сообщений: 780
14.06.2010, 19:04     Не работает virtual #12
А блин! Это же не виртуальная функция! Не заметил! Извиняюсь!
Yandex
Объявления
14.06.2010, 19:04     Не работает virtual
Ответ Создать тему
Опции темы

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