Задание : Создать класс, имеющий заданные свойства, обеспечить доступ к свойствам (запись и
чтение значений свойств) с учетом заданных ограничений. Все конструкторы класса так
же должны обеспечивать создание объекта с учетом заданных ограничений. Написать
программу, демонстрирующую сохранение ограничений при любых действиях внешней
программы над объектом.
Вариант: Почтовый адрес улица, дом,
квартира
Первые символы до пробела свойства
«улица» указывают на тип. «ул» - улица,
«пр» - проспект, «пер» - переулок. На
переулке номера домов лежат в диапазоне от
1 до 30, на улице от 1 до 100, на проспекте от
1 до 1000. Если дом частный, то квартира не
указывается
Программа
#include <iostream>
#include <cstring>
#pragma warning(default:4716)
#pragma warning(disable : 4996)
using namespace std;
class Addr {
public:
Addr(const char* street, const char* numh, int num) : num_(num) {
street_ = new char[std::strlen(street) + 1];
std::strcpy(street_, street);
numh_ = new char[std::strlen(numh) + 1];
std::strcpy(numh_, numh);
};
friend ostream& operator<<(ostream& os, const Addr& addr);
private:
char* street_;
char* numh_;
int num_;
};
ostream& operator<<(ostream& os, const Addr& addr) {
os << "Street: " << addr.street_ << ", Number house: "
<< addr.numh_ << ", Number apartment: " << addr.num_ << endl;
}
int main() {
Addr a1("Obrucheva", "2", 8);
Addr a2("Gerasimenko", "3/14", 300);
std::cout << a1 << a2;
return 0;
}
C/C++
Помогите дополнить программу по условию
#include <iostream>
#include <string>
using namespace std;
class Address {
public:
enum class Type { Lane, Street, Avenue };
Address(Type type) : home_(0), flat_(0), type_(type) {}
bool home(const short value) {
switch (type_) {
case Type::Lane: if (value > 30) return false; break;
case Type::Street: if (value > 100) return false; break;
case Type::Avenue: if (value > 1000) return false; break;
default: return false;
}
if (!value) return false;
home_ = value;
return true;
}
void flat(const short value) {
flat_ = value;
}
void name(const string& value) {
name_ = value;
}
private:
short home_;
short flat_;
Type type_;
string name_;
inline static const string types[]{ "пер"s, "ул"s, "пр"s };
friend ostream& operator<<(ostream& out, const Address& a) {
out << a.types[int(a.type_)] << ". " << a.name_ << ", д. " << a.home_;
if (a.flat_ > 0) out << ", кв. " << a.flat_;
return out;
}
};
void flush() {
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
int main() {
system("chcp 1251 > nul");
Address forest{ Address::Type::Lane };
forest.name("Лесной"s);
forest.home(11);
cout << forest << '\n';
Address builders{ Address::Type::Street };
builders.name("Строителей"s);
builders.home(58);
builders.flat(23);
cout << builders << '\n';
Address moscow{ Address::Type::Avenue };
moscow.name("Московский"s);
moscow.home(283);
moscow.flat(92);
cout << moscow << '\n';
cout << "Введите тип: \n0. Переулок\n1. Улица\n2. Проспект\n>>> ";
int type;
cin >> type;
flush();
Address address{ Address::Type(type) };
cout << "Введите название: ";
string name;
getline(cin, name);
address.name(name);
short home = 0;
do {
cout << "Введите номер дома: ";
cin >> home;
} while (!address.home(home));
short flat = 0;
cout << "Введите номер квартиры либо 0 для частного дома: ";
cin >> flat;
flush();
address.flat(flat);
cout << address << '\n';
system("pause > nul");
}
#include <string>
using namespace std;
class Address {
public:
enum class Type { Lane, Street, Avenue };
Address(Type type) : home_(0), flat_(0), type_(type) {}
bool home(const short value) {
switch (type_) {
case Type::Lane: if (value > 30) return false; break;
case Type::Street: if (value > 100) return false; break;
case Type::Avenue: if (value > 1000) return false; break;
default: return false;
}
if (!value) return false;
home_ = value;
return true;
}
void flat(const short value) {
flat_ = value;
}
void name(const string& value) {
name_ = value;
}
private:
short home_;
short flat_;
Type type_;
string name_;
inline static const string types[]{ "пер"s, "ул"s, "пр"s };
friend ostream& operator<<(ostream& out, const Address& a) {
out << a.types[int(a.type_)] << ". " << a.name_ << ", д. " << a.home_;
if (a.flat_ > 0) out << ", кв. " << a.flat_;
return out;
}
};
void flush() {
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
int main() {
system("chcp 1251 > nul");
Address forest{ Address::Type::Lane };
forest.name("Лесной"s);
forest.home(11);
cout << forest << '\n';
Address builders{ Address::Type::Street };
builders.name("Строителей"s);
builders.home(58);
builders.flat(23);
cout << builders << '\n';
Address moscow{ Address::Type::Avenue };
moscow.name("Московский"s);
moscow.home(283);
moscow.flat(92);
cout << moscow << '\n';
cout << "Введите тип: \n0. Переулок\n1. Улица\n2. Проспект\n>>> ";
int type;
cin >> type;
flush();
Address address{ Address::Type(type) };
cout << "Введите название: ";
string name;
getline(cin, name);
address.name(name);
short home = 0;
do {
cout << "Введите номер дома: ";
cin >> home;
} while (!address.home(home));
short flat = 0;
cout << "Введите номер квартиры либо 0 для частного дома: ";
cin >> flat;
flush();
address.flat(flat);
cout << address << '\n';
system("pause > nul");
}
<p class="slogan"
Похожие вопросы
- Помогите написать программу по этому условию
- Помогите написать программу по этому условию
- Помогите написать программу на С
- Помогите написать программу на C++
- Помогите написать программу на с++
- Помогите написать программу на с++
- Помогите написать программу
- Помогите написать программу на С++
- Помогите с программой на C++
- Помогите исправить программу на С++