- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
- •Int main(int argc, char* argv[])
Int main(int argc, char* argv[])
{
int m;
Record a;
a.min=5; // правильно min – public
a.sec=10; // неправильно sec – private
m=a.Numbersec(); // правильно Numbersec – public
m=a.Roundmin(); // не правильно Roundmin() - private
}
Мнемоническое правило: идентификаторы private могут появиться только внутри методов класса, как publc так и private. Идентификаторы public где угодно.
Различие между class и struct
В struct по умолчанию поля и методы public, в class – private
пример: работает min,sec public
struct Record
{
int min;
int sec;
};
Int main(int argc, char* argv[])
{
Record a; // переменная a типа Record
a.min=4;
a.sec=26;
return 0;
}
пример не работает min,sec - private
class Record
{
int min;
int sec;
};
Int main(int argc, char* argv[])
{
Record a; // переменная a типа Record
a.min=4; // здесь ошибка
a.sec=26; // здесь ошибка
return 0;
}
[C++ Error] Unit1.cpp(17): E2247 'Record::min' is not accessible (min недостуна)
Вывод : используем class и сразу пишем public: потом private:
5) Стиль C++ основные поля объявляются private, доступ к ним через public методы
пример для Record
class Record
{
public:
int Numbersec(); // количество секунд
void Put(int m,int s); // задание значений полей
int Getmin(); // число минут
int Getsec(); // число секунд
private:
int min;
int sec;
};
void Record::Put(int m,int s)
{
min=m;
sec=s;
}
int Record::Getmin()
{
return min;
}
int Record::Getsec()
{
return sec;
}
int Record::Numbersec()
{
return min*60+sec;
}
Int main(int argc, char* argv[])
{
int m,s,k;
Record a;
a.Put(5,36); // min=5 sec=36
k=a.Numbersec();
m=a.Getmin(); // m=5
s=a.Getsec(); // s=36
printf(“%d %d %d”, k,m,s);
}
6) Аргументами методов могут быть объекты своего или других классов, результатом тоже может быть объект некоторого класса.
В классе Record определим метод, вычисляющий среднее время спортсмена по двум попыткам. Аргументами метода Srednee будут два объекта Record, результатом также объект класса Record.
class Record
{
public:
int Numbersec(); // количество секунд
void Put(int m,int s); // задание значений полей
int Getmin(); // число минут
int Getsec(); // число секунд
Record Srednee(Record a,Record b); // аргументы объекты Record и результат тоже.
private:
int min;
int sec;
};
void Record::Put(int m,int s)
{
min=m;
sec=s;
}
int Record::Getmin()
{
return min;
}
int Record::Getsec()
{
return sec;
}
int Record::Numbersec()
{
return min*60+sec;
}
Record Record::Srednee(Record a,Record b)
// Record Record:: первый Record– тип возврата, функция возвращает Record,
// второй Record:: - Srednee относится к классу Record
{
Record c; // локальная переменная типа Record
int k; // обычная целая
c.min=a.min+b.min;
k=a.sec+b.sec;
if(k>=60) // проверка переноса
{
c.min++;
k=k-60;
}
c.min=c.min/2;
c.sec=k/2;
return c; // функция возвращает объект класса Record
}