gpt4 book ai didi

关于复制构造函数的 C++ OOP 程序问题?遗产

转载 作者:行者123 更新时间:2023-11-28 08:17:49 26 4
gpt4 key购买 nike

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

> 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;
};

实现

#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

实现

#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

最佳答案

Undefined symbols for architecture x86_64: "person::~person()", referenced from: student::~student() in main.o student::student() in student.o student::student(double, std::string, std::string, std::string, std::string) in student.o

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

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

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

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

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

关于关于复制构造函数的 C++ OOP 程序问题?遗产,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7061270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com