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

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

Восстановить пароль Регистрация
 
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
14.06.2010, 14:33     Не работает virtual #1
Вот написал пробный код, он не срабатывает:
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++
virtual ~Function(); virtual function(); C++
virtual функции C++
virtual методы и template C++
virtual void execute()=0 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
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();
}
Андрейка
410 / 214 / 24
Регистрация: 25.03.2009
Сообщений: 716
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();
Андрейка
410 / 214 / 24
Регистрация: 25.03.2009
Сообщений: 716
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(); // Тоже ошибка!
Андрейка
410 / 214 / 24
Регистрация: 25.03.2009
Сообщений: 716
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
Еще ссылки по теме:

C++ Virtual Protect
Virtual и noreturn C++
Protected abstract virtual base pure virtual private destructor C++

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

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

Текущее время: 02:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru