Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
8 / 8 / 2
Регистрация: 24.10.2012
Сообщений: 429
1

Виртуальные методы

21.03.2013, 02:02. Показов 1136. Ответов 15
Метки нет (Все метки)

Преобразуйте методы базового класса в виртуальные и переопределите их в производных классах.
Продемонстрируйте работоспособность изменённых классов, осуществляя доступ к виртуальным методам через ссылку на объект.

Как создать виртуальный метод??
0
Вложения
Тип файла: docx Виртуальные методы.docx (20.0 Кб, 8 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2013, 02:02
Ответы с готовыми решениями:

классы, виртуальные функции, динамическая память
VS 2010 C++ win 32 console aplication нужна помощь, не работает корректно, выдает ...

Виртуальные методы
Дан родительский класс Animal (поле кличка). И два наследованных от него класса-потомка: Cat (поле...

виртуальные методы
#include<iostream> #include<stdlib.h> using namespace std; class MArray { protected:...

Виртуальные методы
...в голове не укладываются. Помогите кто может :confusion: У меня про них сложилось...

15
141 / 142 / 64
Регистрация: 11.11.2010
Сообщений: 864
Записей в блоге: 10
21.03.2013, 02:09 2
google: "виртуальные функции C++" не пробовали?

Первой же ссылкой - хрестоматийное описание.
Вот здесь прям совсем... прозрачно разобрано. Можно читать только код и вывод.
1
8 / 8 / 2
Регистрация: 24.10.2012
Сообщений: 429
21.03.2013, 02:18  [ТС] 3
GoldenId, не знаю куда эти вставить??
0
141 / 142 / 64
Регистрация: 11.11.2010
Сообщений: 864
Записей в блоге: 10
21.03.2013, 02:21 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class MyBaseClass
{
public:
   virtual void Method1() {}
   virtual void Method2() {}
};
 
class MyDerivedClass : public MyBaseClass
{
public:
   void Method1() {}
   void Method2() {}
};
0
8 / 8 / 2
Регистрация: 24.10.2012
Сообщений: 429
21.03.2013, 02:27  [ТС] 5
GoldenId, куда именно добавить? там дос есть, можешь взглянешь?
0
141 / 142 / 64
Регистрация: 11.11.2010
Сообщений: 864
Записей в блоге: 10
21.03.2013, 03:12 6
Кликните здесь для просмотра всего текста
Кхм... как бы потактичнее... скажем так, дальше в ту сторону, если бы ты предложила мне связаться с твоим преподавателем, чтобы обсудить задание

Код выложи.
0
8 / 8 / 2
Регистрация: 24.10.2012
Сообщений: 429
21.03.2013, 11:13  [ТС] 7
GoldenId,
gl.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "Train.h"
#include "Bilet.h"
#include <iostream>
#include <conio.h>
using namespace std;
 
int main() {
 
    Train t;
    Bilet b;
    b.getdata();
    cout << endl<< "konstruktor s parametrom \n";
    b.putdata();
    Bilet b1(b);
    cout << endl <<"Copy \n";
    b1.putdata();
 
    getch();
    return 0;
}
Train.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
 
class Train
{
        char punkt[20];
        //char time[20];
        //char *punkt;
        int code;
        double time;
        
public:
    void getdata();    // функция для ввода данных
    void putdata () const;  
    Train(void);// конструктор без параметров
    ~Train(void);
    Train(char *,int, double); // конструктор с параметрами
    Train(Train&); // конструктор копирования
};
Bilet.h
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 "Train.h"
#include <iostream>
using namespace std;
 
class Bilet : public Train
{
    int bil,kol;
 
public:
    void getdata(){    // функция для ввода данных
    Train::getdata();
    cout << "Kol-vo vagona:"; cin >> kol; 
    cout << "Stoimost bileta:"; cin >> bil;
    }
    void putdata () const{
    Train::putdata();
    cout << "\n Kol-vo vagona:" << kol; 
    cout << "\n Stoimost bileta: " << bil;
    }
 
    Bilet();
    Bilet(int,int,char *,int,double);
    Bilet(const Bilet&);
   ~Bilet();
    ~Bilet(void);
};

Train.cpp

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
31
32
33
34
35
36
37
38
#include "Train.h"
#include <iostream>
using namespace std;
 
Train::Train(void):code(0)
{
}
 
Train::Train(char *s, int a, double b):code(a),time (b)
{
    strncpy_s(punkt,30, s, 29);
    if (strlen(s)>29) punkt[29]='\0';
 
 
 
}
 
Train::Train(Train& d):code(d.code),time(d.time)
{
    strncpy_s(punkt,30, d.punkt, 29);
    if (strlen(d.punkt)>29) punkt[29]='\0';
}
 
 
Train::~Train(void)
{
}
 
void Train::putdata () const{
    cout << "\n Nazvanie punkt nazna4enia : " << punkt << "\n Nomer poezda: " << 
            code << "\n Vrema otpravlenia: " << time << endl;
}
 
void Train::getdata(){
    cout << "\n Wedite Nazvanie punkt nazna4enia: ";  cin >> punkt;
   cout << " Wedite Nomer poezda: ";  cin >> code;
   cout << " Wedite Vrema otpravlenia: ";  cin >> time; 
}

Bilet.cpp

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
#include "Bilet.h"
#include <iostream>
using namespace std;
 
Bilet::Bilet() : Train()
{
bil=0;
kol=0;
cout<<"Конструктор по умолчанию";
}
Bilet::Bilet(int a,int b,char * c,int d,double n) : Train(c,d,n)
{
bil=a;
kol=b;
cout<<"Конструктор с параметрами";
}
Bilet::Bilet(const Bilet& t)
{
this->bil=t.bil;
this->kol=t.kol;
cout<<"Конструктор копирования";
}
 
Bilet::~Bilet(void)
{
cout<<"Деструктор";
}
0
141 / 142 / 64
Регистрация: 11.11.2010
Сообщений: 864
Записей в блоге: 10
21.03.2013, 22:11 8
Это виртуальные методы базового класса. В производном они у Вас переопределены благополучно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#pragma once
 
class Train
{
        char punkt[20];
        //char time[20];
        //char *punkt;
        int code;
        double time;
        
public:
    // сколько видел реализаций, везде конструкторы описывают первыми, потом деструкторы
    Train(void);// конструктор без параметров
    Train(char *,int, double); // конструктор с параметрами
    Train(Train&); // конструктор копирования
    ~Train(void);
    virtual void getdata();    // функция для ввода данных
    virtual void putdata () const;  
};
Демонстрация будет выглядеть так:
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
#include "Train.h"
#include "Bilet.h"
#include <iostream>
#include <conio.h>
using namespace std;
 
int main() {
 
    // это демонстрация. отсюда
    Train *t = new Train();
    cout << "t->getdata();" << endl;
    t->getdata();
    Bilet *b = new Bilet();
    cout << "b->getdata();" << endl;
    b->getdata();
    // досюда
    // не знаю, какой konstruktor s parametrom имеется в виду, 
    // здесь конструкторов с параметром в пределах файла нет
    cout << endl<< "konstruktor s parametrom \n"; 
    b->putdata();
    // если не считать этого конструктора копирования
    Bilet b1(*b);
    cout << endl <<"Copy \n";
    b1->putdata();
 
    getch();
    return 0;
}
1
8 / 8 / 2
Регистрация: 24.10.2012
Сообщений: 429
22.03.2013, 11:09  [ТС] 9
GoldenId, программа не запускается ошибка, не является внутренней или внешней командой
0
141 / 142 / 64
Регистрация: 11.11.2010
Сообщений: 864
Записей в блоге: 10
22.03.2013, 19:03 10
Вы проект как создавали? С precompiled header'ом или без? stdafx.h имею в виду.
0
8 / 8 / 2
Регистрация: 24.10.2012
Сообщений: 429
22.03.2013, 19:14  [ТС] 11
GoldenId, не понял
0
141 / 142 / 64
Регистрация: 11.11.2010
Сообщений: 864
Записей в блоге: 10
22.03.2013, 19:17 12
Вот работающий проект под VC++ 2010 Express. По Вашему описанию ошибки похоже, что Вы неправильно создали или скомпоновали проект. Но по такому описанию невозможно сказать, что случилось. Здесь телепаты не ходят.
0
Вложения
Тип файла: zip VirtualMethods.zip (6.5 Кб, 7 просмотров)
8 / 8 / 2
Регистрация: 24.10.2012
Сообщений: 429
23.03.2013, 10:48  [ТС] 13
GoldenId, запустить программу не могу(((
0
141 / 142 / 64
Регистрация: 11.11.2010
Сообщений: 864
Записей в блоге: 10
26.03.2013, 23:24 14
Не знаю, что ответить.
0
28 / 57 / 6
Регистрация: 10.01.2011
Сообщений: 1,229
26.03.2013, 23:32 15
Цитата Сообщение от GoldenId Посмотреть сообщение
Не знаю, что ответить.
Пускай скриншот сделает попытки запуска)))
0
GoldenId
29.03.2013, 00:33     Виртуальные методы
  #16

Не по теме:

Цитата Сообщение от Helldrg Посмотреть сообщение
Пускай скриншот сделает попытки запуска)))
А если не получится? :D

0
29.03.2013, 00:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2013, 00:33
Привет! Вот еще темы с ответами:

Виртуальные методы
Всем доброго времени суток! Вопрос следующий. Как я могу функцией делать подмену виртуального...

виртуальные методы
как вызвать виртуальный метод базового класса из наследуемого класса? struct A { virtual void...

Виртуальные методы
народ вот пример с виртуальными методами, и вывод этой программы class Ancestor { public: ...

Виртуальные методы
Здраствуйте , вот писал виртуальный метод доступа но почему то не получаеться , подскажите почему...

Виртуальные методы(теория)
Здравствуйте уважаемые форумчане! В ходе обучения языку с++ возник вопрос непонимания назначения...

Наследование и виртуальные методы
Начал разбираться с темой наследование и не совсем понимаю как наследуются виртуальные методы,...


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

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

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