【发布时间】:2011-08-15 02:47:01
【问题描述】:
我还有一个关于如何在两个类之间创建复制构造函数的问题。
> 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
【问题讨论】:
-
编译器告诉你什么?
-
Xcode 是集成开发环境 (IDE),而不是编译器。编译器与 IDE 是分开的。即使 Xcode 没有报告任何错误,编译器对你的程序是否编译拥有最终决定权。因此,您需要将 compiler 错误而不是 Xcode 错误复制并粘贴到您的问题中。另外,你手头有a good introductory C++ book 吗?这样一本书将涵盖这个主题以及更多内容。
-
编译时会发生什么?如果编译失败,应该在某处出现错误消息,这对于解决这个问题至关重要。
-
@Sdsd Sdsd:不仅仅是“构建失败”。我们正在寻找编译器报告的错误,而不是Xcode报告的错误。编译器错误会告诉你出了什么问题。如果构建失败,那么编译器将不得不输出错误消息。
-
@In silico 架构 x86_64 的未定义符号:“person::~person()”,引用自:student::~student() in main.o student::student() in student。 o student::student(double, std::string, std::string, std::string, std::string) 在 student.o
标签: c++ oop inheritance constructor