#include<iostream>
#include<cstdlib>
#include<cmath>
#include<conio.h>
#include<ctime>
#include <string>
#include<Windows.h>
#include<fstream>
using namespace std;
class student
{
public:
string family, name, patronymic, address;
int day, month, year, age;
student()
{
}
student(string family1, string name1, string patronymic1, string address1, int day1, int month1, int year1, int age1)
{
family = family1;
name = name1;
patronymic = patronymic1;
address = address1;
day = day1;
month = month1;
year = year1;
age = age1;
}
friend ostream & operator<<(ostream & os, const student & c)
{
cout << c.family << "\t";
cout << c.name << "\t";
cout << c.patronymic << "\t";
cout << c.day << "\t";
cout << c.month << "\t";
cout << c.year << "\t";
cout << c.age << "\t";
cout << c.address << "\t";
return os;
}
};
class schoolboy : public student
{
public:
string progress;
int number, clas;
schoolboy(string progress1, int number1, int clas1)
{
progress = progress1;
number = number1;
clas = clas1;
}
friend ostream & operator<<(ostream & os, const schoolboy & c)
{
cout << c.number << "\t";
cout << c.clas << "\t";
cout << c.progress << "\t";
return os;
}
};
//Создать базовый класс «Учащийся» (ФИО, дата рождения, возраст, адрес проживания)
//и производный класс «Школьник» (номер школы, класс, успеваемость). Тип наследование – открытое. Выполнить:
//1. В классе должна быть переопределена функция - операция вывода на экран информации о школьниках.
//2. В программе - тестере продемонстрировать использование всех функций и операций.
//3. В программе - тестере создать два указателя на два класса,
//выполнить преобразование указателя производного класса в базовый класс и выполнить преобразование указателя базового класса в производный класс.
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(0, "");
student a1("Царева", "Анастасия", "Максимовна", "Ашхабадский", 1, 5, 2004, 18), *aptr;
schoolboy b1("хорошист", 53, 11), *bptr;
aptr = &a1;
bptr = &b1;
cout << "вывод указателя aptr:" << endl;
cout << *aptr;
cout << endl;
cout << "вывод указателя bptr:" << endl;
cout << *bptr;
cout << endl;
aptr = bptr; //восходящиее преобразование
cout << endl;
//bptr = (schoolboy*) aptr;
aptr = bptr;
cout << "Вывод преобразованного указателя aptr" << endl;
cout << *aptr << endl;
bptr = (schoolboy*)&a1; // нисходящее преобразование
cout << "Вывод преобразованного указателя bptr: " << endl;
cout << *bptr;
return 0;
}
Почему в 93 строке (bptr = (schoolboy*)&a1;) пишет progress=<Ошибка при чтении символов строки> и как это исправить?
И следовательно потом программа не хочет работать(