Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 40

Полиморфизм, виртуальные функции, перегрузка функций

12.06.2013, 13:07. Показов 1563. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Изменить программу предыдущей лабораторной работы, функцию определяющую бьет ли первая карта вторую, определитель в базовом классе как виртуальную, переопределив в производном классе с учетом козыря.
Вот предыдущая лабораторная которая называлась "Наследование"
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <stdexcept>
 
class Card {
 public:
  Card() : suit(0), rank(0) {}
  Card(int suit, int rank) : suit(suit), rank(rank) {}
  int Suit() const { return suit; }
  int Rank() const { return rank; }
  void Suit(int suit) { this->suit = suit; }
  void Rank(int rank) { this->rank = rank; }int suit;
  int rank;
 private:
  
};
 
const char *CardRankName(int rank) {
  static const char RANK_NAMES[][10] = {"2", "3", "4", "5", "6", "7",
    "8", "9", "10", "Валет", "Королева", "Король", "Туз"};
  return RANK_NAMES[rank];
}
 
const char *CardSuitName(int suit) {
  static const char SUIT_NAMES[][10] = {"Черви", "Пики", "Крести",
    "Буби"};
  return SUIT_NAMES[suit];
}
 
class Game : public Card
{
public:
Game (int suit, int rank) : Card(suit, rank), trumpSuit(0)
   {
   }
   void TrumpSuit(int suit)
   {
      trumpSuit = suit;
   }
   bool isStronger(const Game& other)
   {
      
      return (this->Suit() == other.Suit() && this->Rank() > other.Rank()) ||
         (this->Suit() == trumpSuit && other.Suit() != trumpSuit) ||
         ((this->Suit() == trumpSuit && other.Suit() == trumpSuit) &&
          this->Rank() > other.Rank());
   }
private:
   int trumpSuit;
};
int main(int, char **) {
setlocale(LC_ALL, "Russian");
 
  int trumpSuit = 0; 
 
  std::cin>>trumpSuit;
 
  Game first(3,9);
  
  first.TrumpSuit(trumpSuit);
  Game second(2, 12);
  std::cout <<"Козырь: "<< CardSuitName(trumpSuit)<<std::endl;
 std::cout << CardRankName(first.Rank()) << " " << CardSuitName(first.Suit()) << " " << 
 (first.isStronger(second) ? "Кроет" : "Не кроет") << " " 
 << CardRankName(second.Rank()) << " " << CardSuitName(second.Suit()) << std::endl;
  return 0;
Добавлено через 5 часов 57 минут
Помогите пожалуйста двоишнику((...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.06.2013, 13:07
Ответы с готовыми решениями:

Полиморфизм, виртуальные функции
Помогите разобраться! В пласе Duck на переменную quacc выдает ошибку в классе Quackbehevior функция определенна как чисто виртуальная,а к...

Виртуальные функции и полиморфизм
Создать абстрактный базовый класс с виртуальной функцией - сумма прогрессии. Создать производные классы: арифметическая прогрессия и...

Полиморфизм и виртуальные функции
Есть некоторая иерархия классов class Base { protected: double *arr; static int count; int ID; int size; public: ...

6
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 40
18.06.2013, 16:58  [ТС]
Помогите пожалуйста завтра на консультацию нужно принести, а я не как сделать не могу, а то к экзамену не допустят!

Добавлено через 5 часов 3 минуты
хоть какие ни-будь предложения..
0
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
18.06.2013, 17:48
в родительском классе пишешь
C++
1
2
3
4
5
6
7
8
9
class Card {
 public:
  //...
   virtual bool isStronger(const Сard& other)
   {
        //тело функции
    }
   virtual ~Card(){}
};
и в потомке замена
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Game : public Card
{
public:
Game (int suit, int rank) : Card(suit, rank), trumpSuit(0)
   {
   }
   void TrumpSuit(int suit)
   {
      trumpSuit = suit;
   }
   bool isStronger(const Card& other)
   {
     //тело функции
   }
private:
   int trumpSuit;
};
и в main
C++
1
2
3
4
5
Card* first = new Game(3,9);
Card* second = new Card(2, 3);
...
delete first;
delete second;
1
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 40
19.06.2013, 04:28  [ТС]
Кудаив
Вроде сделал все как вы сказали но вылезает куча ошибок, впишите это в код пожалуйста

Добавлено через 12 минут
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include <stdexcept>
 
class Card {
 public:
Card() : suit(0), rank(0) {}
  Card(int suit, int rank) : suit(suit), rank(rank) {}
  int Suit() const { return suit; }
  int Rank() const { return rank; }
  void Suit(int suit) { this->suit = suit; }
  void Rank(int rank) { this->rank = rank; }int suit;
  int rank;
   virtual bool isStronger(const Card& other)
   {
        return (this->Suit() == other.Suit() && this->Rank() > other.Rank()) ||
         (this->Suit() == trumpSuit && other.Suit() != trumpSuit) ||
         ((this->Suit() == trumpSuit && other.Suit() == trumpSuit) &&
          this->Rank() > other.Rank());
    }
   virtual ~Card(){}
   private:
    int trumpSuit;
};
const char *CardRankName(int rank) {
  static const char RANK_NAMES[][10] = {"2", "3", "4", "5", "6", "7",
    "8", "9", "10", "Âàëåò", "Êîðîëåâà", "Êîðîëü", "Òóç"};
  return RANK_NAMES[rank];
}
 
const char *CardSuitName(int suit) {
  static const char SUIT_NAMES[][10] = {"×åðâè", "Ïèêè", "Êðåñòè",
    "Áóáè"};
  return SUIT_NAMES[suit];
}
 
class Game : public Card
{
public:
Game (int suit, int rank) : Card(suit, rank), trumpSuit(0)
   {
   }
   void TrumpSuit(int suit)
   {
      trumpSuit = suit;
   }
   bool isStronger(const Card& other)
   {
    
   }
private:
   int trumpSuit;
};
int main(int, char **) {
setlocale(LC_ALL, "Russian");
 
  int trumpSuit = 0; 
 
  std::cin>>trumpSuit;
 
  Game first(3,9);
  Card* one = new Game(3,9);
Card* two = new Card(2, 3);
  first.TrumpSuit(trumpSuit);
  Game second(2, 12);
  std::cout <<"Êîçûðü: "<< CardSuitName(trumpSuit)<<std::endl;
 std::cout << CardRankName(first.Rank()) << " " << CardSuitName(first.Suit()) << " " << 
 (first.isStronger(second) ? "Êðîåò" : "Íå êðîåò") << " " 
 << CardRankName(second.Rank()) << " " << CardSuitName(second.Suit()) << std::endl;
 delete one;
delete two;
   return 0;
  }
Вот так работает, это правильно?
0
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
22.06.2013, 10:21
вроде правильно, только собственно тебе работать надо не с Game first(3,9); и Game second(2, 12);
а с Card* one = new Game(3,9);
Card* two = new Card(2, 3);
0
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 40
22.06.2013, 11:29  [ТС]
Цитата Сообщение от Кудаив Посмотреть сообщение
вроде правильно, только собственно тебе работать надо не с Game first(3,9); и Game second(2, 12);
а с Card* one = new Game(3,9);
Card* two = new Card(2, 3);
Так оно с Game first(3,9); и Game second(2, 12); не работает, впиши свое в код
0
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
22.06.2013, 11:34
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main(int, char **) {
    setlocale(LC_ALL, "Russian");
    
    int trumpSuit = 0; 
    
    std::cin>>trumpSuit;
    
    Card* one = new Game(3,9);
    Card* two = new Card(2, 3);
    one->TrumpSuit(trumpSuit);
    std::cout <<"Козырь: "<< CardSuitName(trumpSuit)<<std::endl;
    std::cout << CardRankName(one->Rank()) << " " << CardSuitName(one->Suit()) << " " << 
                 (one->isStronger(*two) ? "Кроет" : "Не кроет") << " " 
              << CardRankName(two->Rank()) << " " << CardSuitName(two->Suit()) << std::endl;
    delete one;
    delete two;
    return 0;
}
ну что то вроде
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.06.2013, 11:34
Помогаю со студенческими работами здесь

Полиморфизм, перегрузка процедур и функций
Оределите перегруженые функции operation для возведения целых чисел, чиссел с плавающей точкой и чиссел с плавающей точкой двойной точности...

Наследование и полиморфизм.Виртуальные функции
Помогите пожалуйста программу написать. Я новичок и еще не во всем разобрался!!! Задание: Заданы названия базовых и производных...

Реализовать иерархию классов (использовать наследование, полиморфизм, виртуальные функции)
Первый базовый класс – млекопитающие; поля – способ питания, вес, среда обитания. Во втором базовом классе описываются географические...

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

Виртуальные функции и перегрузка методов, в чем разница?
привет к сожалению могу уже уловить мысль, все в куче в голове. объясните пожалуйста в чем отличие виртуальной функции от перегрузки...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru