对复制构造函数的c++ OOP程序问题?继承

C++ OOP Program question on copy constructor? Inheritance

本文关键字:程序 问题 继承 OOP c++ 复制 构造函数      更新时间:2023-10-16

我还有一个关于如何在两个类之间创建复制构造函数的问题。

> person(const person& a) : name(a.getName()), address(a.getAddress()),
> schoolname(a.getSchoolname()), ssn(a.getSsn()),
> idnumber(a.getIdnumber())
>         {
> 
>         }
> 
>         person& operator =(const person& b);

那是我的构造函数的尝试?我失败得很惨吗?

谢谢!

#ifndef person_h
#define person_h
#include <string>
using namespace std;
    class person
    {

    public:
        person();
        person(const person& a) : name(a.getName()), address(a.getAddress()), schoolname(a.getSchoolname()), ssn(a.getSsn()), idnumber(a.getIdnumber())
        {
        }
        person& operator =(const person& b);
        person(string theName, string theAddress, string theSchoolname, string theSsn, double theIdnumber);
        string getName() const;
        void setName(string newName);
        string getSchoolname()const;
        void setSchoolname(string newSchoolname);
        string getAddress() const;
        void setAddress(string newAddress);
        string getSsn() const;
        void setSsn(string newSsn);
        double getIdnumber()const;
        void setIdnumber(double newIdnumber);
        ~person();
    protected:
        string name;
        string address;
        string schoolname;
        string ssn;
        double idnumber;
    };

impliment

#include "person.h"
#include <string>
#include <iostream>
using std::string;
using std::cout;

    person::person() : name("no name yet"), address("no address yet"), schoolname("no school name"), ssn("no number") , idnumber(0)
    {
    }

    person :: person(string theName, string theAddress, string theSchoolname, string theSsn, double theIdnumber): name(theName), address(theAddress), schoolname(theSchoolname), ssn(theSsn), idnumber(0)
    {
    }


    string person :: getName() const
    {
        return name;
    }
    string person :: getAddress() const
    {
        return address;
    }
    string person :: getSchoolname() const
    {
        return schoolname;
    }
    string person ::getSsn()const
    {
        return ssn;
    }
    double person :: getIdnumber() const
    {
        return idnumber;
    }
    void person :: setName(string newName)
    {
        name = newName;
    }
    void person :: setAddress(string newAddress)
    {
        address = newAddress;
    }
    void person :: setSchoolname( string newSchoolname)
    {
        schoolname = newSchoolname;
    }
    void person ::setSsn(string newSsn)
    {
        ssn =  newSsn;
    }
    void person ::setIdnumber( double newIdnumber)
    {
        idnumber = newIdnumber;
    }

派生类头文件

#ifndef student_h
#define student_h
#include "person.h"
#include <string>
class student : public person
{
public:
    student();
    student(student const& s);
    student( double theStudentid, string theGpa, string theCounselor, string theMajor, string theGraduatingclass );
    double getStudentid() const;
    void setStudentid(double newStudentid);
    string getGpa()const;
    void setGpa(string newGpa);
    string getCounselor() const;
    void setCounselor(string newCounselor);
    string getMajor() const;
    void setMajor(string newMajor);
    string getGraduatingclass() const;
    void setGraduatingclass(string newGraduatingclass);
    void readClasses();
    void printTranscript();
    void addClass(string , string , string );
protected: 
    double studentid;
    string gpa;
    string counselor; 
    string major;
    string graduatingclass;
    string classes[40];
    string transcript[40];
    string Class[100];
    char array[100];
    int counter;
};
#endif

Impliment

#include "student.h"
#include <string>
using namespace std;

    student::student() : gpa("none"), counselor("none"), major("none"), graduatingclass("none"), studentid(0)
    {
    }
    student :: student ( double theStudentid, string theGpa, string theCounselor, string theMajor, string theGraduatingclass):  studentid(0), gpa(theGpa), counselor(theCounselor), major(theMajor), graduatingclass(theGraduatingclass)
    {
    }

    double student :: getStudentid() const
    {
        return studentid;
    }
    string student :: getGpa() const
    {
        return gpa;
    }
    string student :: getCounselor() const
    {
        return counselor;
    }
    string student :: getMajor() const
    {
        return major;
    }
    string student :: getGraduatingclass() const
    {
        return graduatingclass;
    }
    void student :: setStudentid(double newStudentid)
    {
        studentid = newStudentid;
    }
    void student :: setGpa(string newGpa)
    {
        gpa = newGpa;
    }
    void student :: setCounselor(string newCounselor)
    {
        counselor = newCounselor;
    }
    void student :: setMajor(string newMajor)
    {
        major = newMajor;
    }

    void student :: setGraduatingclass(string newGraduatingclass)
    {
        graduatingclass = newGraduatingclass;
    }

Main.cpp

架构x86_64的未定义符号:"person::~person()",引用自main中的:student::~student()。学生:学生()in学生。O student::student(double, std::string, std::string,;Std::string, Std::string)

根据链接器错误,您缺少person::~person()的定义,person的析构函数。在类声明头文件中,有:

class person
{
public:
    // ...
    person();
    ~person();
    // ...
};

但是在你的实现文件中,你有:

// ...
person::person() {}
// Where's person::~person() {} ?
// ...

添加person::~person()的定义,至少可以解决上述错误