Я сделал класс наследования с базового класса PersonНаследование человек класс не работает
Person.h
#include <iostream>
#include <string>
using namespace std;
class Person
{
friend ostream& operator<<(ostream &os, const Person &p);
friend istream& operator>>(istream &is, Person &p);
private:
char* m_name;
int m_age;
string m_ssn;
protected:
virtual void Read(istream &is);
virtual void Write(ostream &os) const;
public:
Person();
Person(const char* const name, int age, const string &ssn);
Person(const Person &p);
~Person();
Person & operator = (const Person& other);
virtual string getName() const;
virtual int getAge() const;
virtual string getSSN() const;
void setName(const char* const name);
void setAge(int age);
void setSSN(string ssn);
string getType() const;
};
Person.cpp
#include <iostream>
#include <string>
#include "Person.h"
using namespace std;
ostream& operator<<(ostream &os, const Person &p)
{
\t p.Write(os);
\t return os;
}
istream& operator>>(istream &is, Person &p)
{
\t p.Read(is);
\t return is;
}
Person::Person()
{
\t m_name = new char[10];
\t for (int i = 0; i < 10-1; i++)
\t {
\t \t m_name[i] = 'X';
\t }
\t m_name[10 - 1] = '\0';
\t m_age = 0;
\t m_ssn = "XXX-XX-XXXX";
}
Person::Person(const char* name, int age, const string &ssn)
{
\t m_name = new char[(int)strlen(name)+1];
\t for (int y = 0; y < (int)strlen(name); y++)
\t \t m_name[y] = name[y];
\t m_age = age;
\t m_ssn = ssn;
}
Person::Person(const Person& P)
{
\t m_name = new char[(int)strlen(P.m_name)+1];
\t for (size_t i = 0; i <= (int)strlen(P.m_name); i++)
\t {
\t \t m_name[i] = P.m_name[i];
\t }
\t m_age = P.m_age;
\t m_ssn = P.m_ssn;
}
Person::~Person()
{
\t delete[] m_name;
}
Person& Person::operator=(const Person& other)
{
\t if (this == &other)
\t \t return *this;
\t delete [] m_name;
\t m_name = new char[(int)strlen(other.m_name) + 1];
\t for (int i = 0; i <= (int)strlen(other.m_name); i++)
\t {
\t \t m_name[i] = other.m_name[i];
\t }
\t m_age = other.m_age;
\t m_ssn = other.m_ssn;
}
string Person::getName() const
{
\t return string(m_name);
}
int Person::getAge() const
{
\t return int(m_age);
}
string Person::getSSN() const
{
\t return string(m_ssn);
}
void Person::setName(const char* const name)
{
\t delete[] m_name;
\t m_name = new char[(int)strlen(name) + 1];
\t for (int i = 0; i <= (int)strlen(name); i++)
\t {
\t \t m_name[i] = name[i];
\t }
}
void Person::setAge(int age)
{
\t m_age = age;
}
void Person::setSSN(string ssn)
{
\t m_ssn = ssn;
}
string Person::getType() const
{
\t return string("Person");
}
void Person::Write(ostream &os) const
{
\t if (&os == &cout)
\t {
\t \t os << "Name: " << m_name << "\nAge: " << m_age << "\nSSN: " << m_ssn;
\t }
\t else
\t \t os << m_name << "\n" << m_age << "\n" << m_ssn;
}
void Person::Read(istream &is)
{
\t string name;
\t if (&is == &cin)
\t {
\t \t cout << "Enter the Name: " << flush;
\t \t getline(is, name);
\t \t if (name.length() == 0)
\t \t \t getline(is, name);
\t \t cout << "Enter the Age: " << flush;
\t \t is >> m_age;
\t \t cout << "Enter the SSN: " << flush;
\t \t getline(is, m_ssn);
\t \t is.get();
\t }
\t else
\t {
\t \t getline(is, name);
\t \t if (!is)
\t \t \t return;
\t \t if (name.length() == 0)
\t \t \t getline(is, name);
\t \t is >> m_age;
\t \t getline(is, m_ssn);
\t \t is.get();
\t }
\t delete[] m_name;
\t m_name = new char[name.length() + 1];
\t for (int i = 0; i < (int)name.length(); i++)
\t {
\t \t m_name[i] = name[i];
\t }
\t m_name[name.length()] = '\0';
}
I «Я даже не собираюсь вкладывать в наследующий класс, который является Student, потому что я уже получаю ошибки, когда тестирую свой класс Person.
Я пытался в моем основном следующем:
#include "Person.h"
#include "Student.h"
int main()
{
\t Person ptr2Stu("Joe", 22, "123-45-6678");
\t cout << ptr2Stu.getName() << endl;
\t cout << ptr2Stu.getAge() << endl;
\t cout << ptr2Stu.getSSN() << endl;
\t cout << ptr2Stu.getType() << endl;
\t system("pause");
}
Я получаю ошибки при попытке построить это.
Какие ошибки вы получаете, и сколько из них вы добавили с момента, когда код работал отлично? – Beta