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

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

Восстановить пароль Регистрация
 
Karata
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 40
12.06.2013, 13:07     Полиморфизм, виртуальные функции, перегрузка функций #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
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 минут
Помогите пожалуйста двоишнику((...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2013, 13:07     Полиморфизм, виртуальные функции, перегрузка функций
Посмотрите здесь:

C++ Перегрузка операторов и полиморфизм
C++ Функции. Перегрузка функций
Наследование и полиморфизм.Виртуальные функции C++
C++ Построить таблицу значений функции(Перегрузка функций)
C++ Виртуальные функции и полиморфизм
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Karata
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 40
18.06.2013, 16:58  [ТС]     Полиморфизм, виртуальные функции, перегрузка функций #2
Помогите пожалуйста завтра на консультацию нужно принести, а я не как сделать не могу, а то к экзамену не допустят!

Добавлено через 5 часов 3 минуты
хоть какие ни-будь предложения..
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
18.06.2013, 17:48     Полиморфизм, виртуальные функции, перегрузка функций #3
в родительском классе пишешь
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;
Karata
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 40
19.06.2013, 04:28  [ТС]     Полиморфизм, виртуальные функции, перегрузка функций #4
Кудаив
Вроде сделал все как вы сказали но вылезает куча ошибок, впишите это в код пожалуйста

Добавлено через 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;
  }
Вот так работает, это правильно?
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
22.06.2013, 10:21     Полиморфизм, виртуальные функции, перегрузка функций #5
вроде правильно, только собственно тебе работать надо не с Game first(3,9); и Game second(2, 12);
а с Card* one = new Game(3,9);
Card* two = new Card(2, 3);
Karata
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 40
22.06.2013, 11:29  [ТС]     Полиморфизм, виртуальные функции, перегрузка функций #6
Цитата Сообщение от Кудаив Посмотреть сообщение
вроде правильно, только собственно тебе работать надо не с 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); не работает, впиши свое в код
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2013, 11:34     Полиморфизм, виртуальные функции, перегрузка функций
Еще ссылки по теме:

Передача параметров во виртуальные функции, перегрузка C++
C++ Написать реферат за пару часов на тему "Наследование, виртуальные функции и динамический полиморфизм"
Полиморфизм, перегрузка процедур и функций C++

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

Или воспользуйтесь поиском по форуму:
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
22.06.2013, 11:34     Полиморфизм, виртуальные функции, перегрузка функций #7
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;
}
ну что то вроде
Yandex
Объявления
22.06.2013, 11:34     Полиморфизм, виртуальные функции, перегрузка функций
Ответ Создать тему
Опции темы

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