Обособяване на класове
Чете се информация за компютри, съдържаща:
име на модел | name | OmniBook XE |
цена | price | 5660 |
оценка | score | 76 |
Търси се продукта с най-голямо отношение оценка/цена.
#include <iostream>
#include <string>
using namespace std;
int main()
{ string best_name = "";
double best_price = 0;
int best_score = 0;
bool more = true;
while (more)
{ string next_name;
double
next_price;
int next_score;
cout <<
"Please enter the model name: ";
getline(cin,
next_name);
cout <<
"Please enter the price: ";
cin >>
next_price;
cout <<
"Please enter the score: ";
cin >>
next_score;
string
remainder; /* read remainder of line */
getline(cin,
remainder);
if (next_price
!= 0)
{
if (best_price == 0 or
next_score/next_price > best_score/best_price)
{ best_name = next_name;
best_score = next_score;
best_price = next_price;
}
}
cout <<
"More data? (y/n) ";
string
answer;
getline(cin,
answer);
if (answer
!= "y") more = false;
}
cout << "The best bang
for the buck is " << best_name
<<
" (Score: " << best_score
<<
" Price: " << best_price << ")\n";
return 0;
}
Интерфейс и капсулиране
#include <iostream>
#include <string>
using namespace std;
class Product {
public: /*интерфейс*/
Product();
/*създава нов продукт*/
void read();
/*чете продукт*/
bool is_better_than(Product
b) const;/*сравнява*/
void print() const;
/*отпечатва*/
private: /*капсулиране*/
string name;
/*скрити данни*/
double price;
/*скрити данни*/
int score;
/*скрити данни*/
};
int main()
{ Product best;
bool more = true;
while (more)
{ Product next;
next.read();
if (next.is_better_than(best))
best = next;
cout <<
"More data? (y/n) ";
string
answer;
getline(cin,
answer);
if (answer
!= "y") more = false;
}
cout << "The best bang
for the buck is ";
best.print();
return 0;
}
Членове-функции
* конструктор
Product::Product() { price = 0;
score = 0; }
* мутатори (set-функции)
void Product::read()
{ cout << "Please enter the
model name: ";
getline(cin, name);
cout << "Please enter
the price: ";
cin >> price;
cout << "Please enter
the score: ";
cin >> score;
string remainder;
getline(cin, remainder);
}
* функции за достъп (get-функции)
bool Product::is_better_than(Product b)
const
{ if (price == 0) return false;
if (b.price == 0) return
true;
if (score/price > b.score/b.price)
return true;
return false;
}
void Product::print() const
{ cout << name
<< " Price: " << price
<< " Score: " << score << "\n"; }
* Неявен параметър на член-функция
Конструктори по подразбиране и
с параметри
* Конструкторът инициализира полетата данни на обекта
* Предефиниране на функции
class Employee {
public:
Employee();
Employee(string emp_name,
double init_salary);
void set_salary(double new_salary);
string get_name() const;
double get_salary() const;
void print() const;
private:
string name;
double salary;
};
Employee::Employee(string emp_name, double
init_salary)
{ name = emp_name;
salary = init_salary; }
Достъп до полетата с данни
* Само членовете-функции имат достъп до скритите полета с данни
string get_name() const
{ return name; }
double get_salary() const { return salary; }
* Явни и неявни параметри на функции
-- член-функция с използване на достъпът до скритите
данни
void Employee::print() const
{ cout << "Name: " << name
<< " "
<<
"Salary: " << salary << "\n"; }
-- член-функция с използване на член-функции
от същия клас
void Employee::print() const
{ cout << "Name: " << get_name()
<< " "
<<
"Salary: " << get_salary() << "\n"; }
-- външна за класа функция
void print(Employee const &emp)
{ cout << "Name: " << emp.get_name()
<< " "
<<
"Salary: " << emp.get_salary() << "\n"; }