对复制构造函数的c++ OOP程序问题?继承
C++ OOP Program question on copy constructor? Inheritance
我还有一个关于如何在两个类之间创建复制构造函数的问题。
> 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()
的定义,至少可以解决上述错误
相关文章:
- C++程序问题:抛出'std::invalid_argument'实例后终止调用
- 测试外壳,插入和快速的程序问题
- Mongodb c ++驱动程序问题
- 输出中的特定递归反向程序问题
- C++ std::endl 的多线程程序 I/O 问题
- 我如何利用核心文件在C/C 中找到应用程序问题
- 套接字 TCP 服务器程序问题
- C++,结构数据库程序问题
- visual c++程序问题
- C++多个程序问题(rand、转换、崩溃)
- 非常基本的C++程序问题 - 二进制表达式的操作数无效
- C++练习车辆程序问题 - 初学者编程
- 关于堆和堆栈应用程序问题
- Boost asio:io服务在销毁步骤中被阻止了更多的处理程序问题
- 使用链接linux编译GLFW应用程序问题
- C++计算器程序.问题
- 基于WIndows - manifest的ETW提供程序问题
- 求1到100之间质数的程序问题
- 文件加载程序问题
- mfcc++托盘应用程序问题