继承人类不工作
Inheritance person class not working
我用基类Person 创建了一个继承类
人小时
#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)
{
p.Write(os);
return os;
}
istream& operator>>(istream &is, Person &p)
{
p.Read(is);
return is;
}
Person::Person()
{
m_name = new char[10];
for (int i = 0; i < 10-1; i++)
{
m_name[i] = 'X';
}
m_name[10 - 1] = ' ';
m_age = 0;
m_ssn = "XXX-XX-XXXX";
}
Person::Person(const char* name, int age, const string &ssn)
{
m_name = new char[(int)strlen(name)+1];
for (int y = 0; y < (int)strlen(name); y++)
m_name[y] = name[y];
m_age = age;
m_ssn = ssn;
}
Person::Person(const Person& P)
{
m_name = new char[(int)strlen(P.m_name)+1];
for (size_t i = 0; i <= (int)strlen(P.m_name); i++)
{
m_name[i] = P.m_name[i];
}
m_age = P.m_age;
m_ssn = P.m_ssn;
}
Person::~Person()
{
delete[] m_name;
}
Person& Person::operator=(const Person& other)
{
if (this == &other)
return *this;
delete [] m_name;
m_name = new char[(int)strlen(other.m_name) + 1];
for (int i = 0; i <= (int)strlen(other.m_name); i++)
{
m_name[i] = other.m_name[i];
}
m_age = other.m_age;
m_ssn = other.m_ssn;
}
string Person::getName() const
{
return string(m_name);
}
int Person::getAge() const
{
return int(m_age);
}
string Person::getSSN() const
{
return string(m_ssn);
}
void Person::setName(const char* const name)
{
delete[] m_name;
m_name = new char[(int)strlen(name) + 1];
for (int i = 0; i <= (int)strlen(name); i++)
{
m_name[i] = name[i];
}
}
void Person::setAge(int age)
{
m_age = age;
}
void Person::setSSN(string ssn)
{
m_ssn = ssn;
}
string Person::getType() const
{
return string("Person");
}
void Person::Write(ostream &os) const
{
if (&os == &cout)
{
os << "Name: " << m_name << "nAge: " << m_age << "nSSN: " << m_ssn;
}
else
os << m_name << "n" << m_age << "n" << m_ssn;
}
void Person::Read(istream &is)
{
string name;
if (&is == &cin)
{
cout << "Enter the Name: " << flush;
getline(is, name);
if (name.length() == 0)
getline(is, name);
cout << "Enter the Age: " << flush;
is >> m_age;
cout << "Enter the SSN: " << flush;
getline(is, m_ssn);
is.get();
}
else
{
getline(is, name);
if (!is)
return;
if (name.length() == 0)
getline(is, name);
is >> m_age;
getline(is, m_ssn);
is.get();
}
delete[] m_name;
m_name = new char[name.length() + 1];
for (int i = 0; i < (int)name.length(); i++)
{
m_name[i] = name[i];
}
m_name[name.length()] = ' ';
}
我甚至不打算放入继承类,也就是Student,因为当我测试Person类时,我已经遇到了错误。
我主要尝试了以下内容:
#include "Person.h"
#include "Student.h"
int main()
{
Person ptr2Stu("Joe", 22, "123-45-6678");
cout << ptr2Stu.getName() << endl;
cout << ptr2Stu.getAge() << endl;
cout << ptr2Stu.getSSN() << endl;
cout << ptr2Stu.getType() << endl;
system("pause");
}
我在尝试构建此时收到错误。
Person.cpp
出现问题
Person::Person(const char* name, int age, const string &ssn)
在头文件中,声明为
Person(const char* const name, int age, const string &ssn);
^^^^
因此,请更改声明/定义中的任意一个。
您可以省略getSSN
和getAge
中的类型转换。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- 继承人类不工作