Mail.RuПочтаМой МирОдноклассникиИгрыЗнакомстваНовостиПоискВсе проекты

Как изменить программу (С++) ?

Ученик (125), на голосовании 6 лет назад
Дополнен 6 лет назад
#include <iostream.h>

class karta//объявляем класс karta
{
protected://ключевое слово protected означает, что поля и методы класса, идущие после него, будут доступны только в данном классе и в производных классах (а private - только в данном классе)
char mast;//объявляем поля класса - масть и достоинство
int dost;

public://ключевое слово public означает, что поля и методы класса, идущие после него, будут доступны как внутри данного класса, так и вне его

karta ()//конструктор по умолчанию (без параметров)
{
char t;
cout<<"Vvedite dostoinstvo (6...10,j,q,k,t):\n";//ввод достоинства в виде символа
cin>>t;
switch ((int)t)//преобразование символа, обозначающего достоинство, в число для записи его в поле dost
{
case 54:dost=6;break;
case 55:dost=7;break;
case 56:dost=8;break;
case 57:dost=9;break;
case 58:dost=10;break;
case 'j':dost=11;break;
case 'q':dost=12;break;
case 'k':dost=13;break;
case 't':dost=14;break;
default:dost=t;
}
cout<<"Vvedite mast (c,t,b,p):\n";//ввод масти
cin>>mast;
}

karta (char d, char m)//конструктор с параметрами
{
switch ((int)d)//преобразование символа, обозначающего достоинство, в число для записи его в поле dost
{
case 54:dost=6;break;
case 55:dost=7;break;
case 56:dost=8;break;
case 57:dost=9;break;
case 58:dost=10;break;
case 'j':dost=11;break;
case 'q':dost=12;break;
case 'k':dost=13;break;
case 't':dost=14;break;
default:dost=d;
}
mast=m;//присваивание полю mast значения параметра m
}

void print()//метод вывода
{
if (dost<11)//если меньше 11 (т. е. 6-10)..
cout<
Дополнен 6 лет назад
class Karta:public karta//объявление класса Karta, который является производным от класса karta. идентификатор доступа public обозначает, что поля и методы будут наследоваться с теми же идентификаторами доступа, что и в базовом классе (за исключением private - они не будут доступны в производном классе)
{
protected:
bool koz;//объявление поля, обозначающего, является ли карта козырем

public:

Karta ():karta()//объявление конструктора по умолчанию, который вызывает аналогичный конструктор базового класса. .
{
cout<<"Kozyr? (1 - da, 0 - net)\n";//..но дополнительно еще запрашивает ввода значения поля koz
cin>>koz;
}

Karta (char d, char m):karta(d,m)//объявление конструктора с 2-мя параметрами, который вызывает аналогичный конструктор базового класса. .
{
koz=0;//..и считает, что карта не является козырем
}

Karta (char d, char m, bool k):karta(d,m)//объявление конструктора с 3-мя параметрами, который вызывает аналогичный конструктор базового класса c 2-мя параметрами. .
{
koz=k;//..а 3-й параметр использует для задания значения поля koz
}

bool hits(Karta b)//объявление метода, определяющего, бьет ли карта (для удобства назовем ее "наша карта") другую, указанную в качестве параметра
{
if (koz==b.koz)//если значения поля koz обеих карт равны, т. е. обе карты козыри или не козыри. .
{//..то надо сравнить их достоинства и проверить, совпадают ли масти
if (dost>b.dost&&mast==b.mast)//если достоинство нашей карты больше достоинства карты-параметра и их масти совпадают. .
return 1;//..возвращаем 1 (бьет). .
return 0;//..иначе возвращаем 0 (не бьет)
}
else//если одна карта козырь, а другая нет. .
if (koz)//если козырем является наша карта
return 1;//возвращаем 1 (бьет)
return 0;//в противном случае возвращаем 0 (не бьет)
}

};

int main()
{
Karta a,b('q','t');//объявление экземпляров класса Karta, один использует конструктор по умолчанию, друго - с параметрами
a.print();cout<
Дополнен 6 лет назад
<
Дополнен 6 лет назад
<
Дополнен 6 лет назад
<
Дополнен 6 лет назад
Как изменить программу (С++) с таким условием: Изменить программу предыдущей лабораторной работы. Функцию определяющую бьет ли первая карта вторую, определить в базовом классе как виртуальную, переопределив в производном классе с учетом козыря! "
Дополнен 6 лет назад
Вот я написал написал предыдущую лабу выше!
Дополнен 6 лет назад
Что не вместилось : t<
Дополнен 6 лет назад
b.print();cout<
Дополнен 6 лет назад
a.print();cout<<(a.hits(b)?" ":" ne ")<<"kroet ";b.print();cout<
Дополнен 6 лет назад
В том то и касяк я вобще про виртуальные функции дуб дубом! На работе был когда лекция шла!! ! Даже как их обьявлять и зачем они нужны не знаю
Голосование за лучший ответ
Так что там поменять-то хочеш?
1. такую-же функцию, как в призводном классе, определи и в базисном, только определив как виртуальную
(естессно, парамертом у нее будет обьект базового класса, а не производного)
2. в свежедобавленой функции - стереть все упоминания про козыри
Похожие вопросы
Также спрашивают