Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2017, 14:07   #1
Родион_Волков
Пользователь
 
Регистрация: 12.05.2016
Сообщений: 11
По умолчанию Наследование

Здравствуйте!
Написал код, не выдает никаких ошибок, но не работает. Может кто помочь сказать в чем может быть ошибка?
Изначально был написан 1 класс с полями:Имя, возраст пол.
далее необходимо было описать класс производный от изначального с дополнительным динамическим полем: Гражданство.
В функции main выполнить задание по поиску мужчин от 20 до 30 лет,которые являются гражданами, допустим Китая(название задается min 2 буквами).

Код:
#include <iomanip>
#include <iostream>
#pragma warning(disable : 4996)

using namespace std;

class People {
public:
	People() { nameofPeople_ = NULL; }
	People(char *, unsigned, char);
	People(const People &);
	~People() { delete[] nameofPeople_; }

	char *getNameOfPeople() { return nameofPeople_; }
	unsigned getVozrast() { return Vozrast_; }
	char getPol() { return Pol_; }

	People &operator=(const People &);
	friend ostream &operator<<(ostream &, const People &);
	friend istream &operator >> (istream &, People &);

protected:
	char *nameofPeople_;
	unsigned Vozrast_;
	char Pol_;
};

class Grajdan : public People {
public:
	Grajdan() { Grajdanstvo_ = NULL; }
	Grajdan(char *, unsigned, char, char *);
	Grajdan(const Grajdan &);
	Grajdan &operator=(const Grajdan &);

	char *getGrajdanstvo() { return Grajdanstvo_; }

	friend ostream &operator<<(ostream &s, const Grajdan &obj);
	friend istream &operator >> (istream &s, Grajdan &obj);

protected:
	char *Grajdanstvo_;
};

People::People(char *nameofPeople, unsigned Vozrast, char Pol) {
	nameofPeople_ = new char[strlen(nameofPeople) + 1];
	strcpy(nameofPeople_, nameofPeople);
	Vozrast_ = Vozrast;
	Pol_ = Pol;
}

People::People(const People &obj) {
	nameofPeople_ = new char[strlen(obj.nameofPeople_) + 1];
	strcpy(nameofPeople_, obj.nameofPeople_);
	Vozrast_ = obj.Vozrast_;
	Pol_ = obj.Pol_;
}

People &People:: operator=(const People &obj) {
	if (this != &obj) {
		delete[] nameofPeople_;
		nameofPeople_ = new char[strlen(obj.nameofPeople_) + 1];
		strcpy(nameofPeople_, obj.nameofPeople_);
		Vozrast_ = obj.Vozrast_;
		Pol_ = obj.Pol_;
	}
	return *this;
}

ostream &operator<<(ostream &s, const People &obj) {
	return s << setw(30) << obj.nameofPeople_ << setw(8) << obj.Vozrast_ << setw(8)
		<< obj.Pol_ << '\n';
}

istream &operator >> (istream &s, People &obj) {
	char buffer[100];
	s >> buffer >> obj.Vozrast_ >> obj.Pol_;
	delete[] obj.nameofPeople_;
	obj.nameofPeople_ = new char[strlen(buffer) + 1];
	strcpy(obj.nameofPeople_, buffer);
	return s;
}

Grajdan::Grajdan(char *nameofPeople, unsigned Vozrast, char Pol, char *Grajdanstvo) {
	nameofPeople_ = new char[strlen(nameofPeople) + 1];
	strcpy(nameofPeople_, nameofPeople);
	Vozrast_ = Vozrast;
	Pol_ = Pol;
	Grajdanstvo_ = new char[strlen(Grajdanstvo) + 1];
	strcpy(Grajdanstvo_, Grajdanstvo);
}

Grajdan::Grajdan(const Grajdan &obj) {
	nameofPeople_ = new char[strlen(obj.nameofPeople_) + 1];
	strcpy(nameofPeople_, obj.nameofPeople_);
	Vozrast_ = obj.Vozrast_;
	Pol_ = obj.Pol_;
	Grajdanstvo_ = new char[strlen(obj.Grajdanstvo_) + 1];
	strcpy(Grajdanstvo_, obj.Grajdanstvo_);
}

Grajdan &Grajdan:: operator=(const Grajdan &obj) {
	if (this != &obj) {
		delete[] nameofPeople_;
		nameofPeople_ = new char[strlen(obj.nameofPeople_) + 1];
		strcpy(nameofPeople_, obj.nameofPeople_);
		Vozrast_ = obj.Vozrast_;
		Pol_ = obj.Pol_;
		delete[] Grajdanstvo_;
		Grajdanstvo_ = new char[strlen(obj.Grajdanstvo_) + 1];
		strcpy(Grajdanstvo_, obj.Grajdanstvo_);
	}
	return *this;
}

ostream &operator<<(ostream &s, const Grajdan &obj) {
	return s << obj.nameofPeople_ << '\n';
}

istream &operator >> (istream &s, Grajdan &obj) {
	char buffer[100];
	char buffer2[100];
	s >> buffer >> obj.Vozrast_ >> obj.Pol_ >> buffer2;
	delete[] obj.nameofPeople_;
	obj.nameofPeople_ = new char[strlen(buffer) + 1];
	strcpy(obj.nameofPeople_, buffer);
	delete[] obj.Grajdanstvo_;
	obj.Grajdanstvo_ = new char[strlen(buffer2) + 1];
	strcpy(obj.Grajdanstvo_, buffer2);
	return s;
}

int main() {
	setlocale(LC_ALL, "Russian");
	cout << "Введите количество людей:";
	unsigned n;
	int s = 0;
	cin >> n;
	Grajdan *objects = new Grajdan[n];
	cout << "Введите данные:\n";
	for (unsigned i = 0; i < n; ++i)
	{
		cin >> objects[i];
	}
	char z;
	cout << "Какой пол искать?";
	cin >> z;
	char q[2];
	cout << "Какое гражданство искать?";
	char *editor = new char[100];
	strcpy(editor, " ");
	for (int i = 0; i<n; i++)
		cin >> editor;
	for (unsigned i = 0; i < n; i++)
	{
		if (objects[i].getGrajdanstvo() == editor && objects[i].getPol() == z && objects[i].getVozrast() >= 20 && objects[i].getVozrast() <= 30)
			s++;
	}
	cout << "Мужчины с гражданством Китая от 20 до 30 лет:" << s << '\n';

	delete[] editor;
	system("pause");
}

Последний раз редактировалось Аватар; 09.05.2017 в 14:14.
Родион_Волков вне форума Ответить с цитированием
Старый 09.05.2017, 14:18   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Родион_Волков Посмотреть сообщение
не работает
почему вы так решили?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.05.2017, 14:20   #3
Родион_Волков
Пользователь
 
Регистрация: 12.05.2016
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
почему вы так решили?
потому что, когда я компилирую, не выдает правильного ответа.

Последний раз редактировалось Родион_Волков; 09.05.2017 в 14:32.
Родион_Волков вне форума Ответить с цитированием
Старый 09.05.2017, 21:41   #4
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

std::string или strcmp используй... хз как на счёт др. ошибок, но "objects[i].getGrajdanstvo() == editor" - сравнение адреса, а не содержимого строк
GreenWizard вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наследование С++ dykee Помощь студентам 0 09.11.2014 22:30
Наследование С++ Infini Общие вопросы C/C++ 4 28.04.2013 22:19
Наследование. ISV-777 Общие вопросы по Java, Java SE, Kotlin 1 05.12.2011 22:31
Наследование Настюнечка Помощь студентам 0 29.11.2011 18:40
Наследование в С++ 3AKPbIBAKA Помощь студентам 3 24.11.2010 16:38