- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
// Homework 3.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include <string>
#include <iomanip>
#include <cassert>
using namespace std;
class Person{
public:
Person(){ //Default Constructor
name = "";
ssn = 0;
age = 0;
gender = "";
address = "";
phone = "";
}
Person(const Person& p){ //copy constructor
name = p.name;
ssn = p.ssn;
age = p.age;
gender = p.gender;
address = p.address;
phone = p.phone;
}
Person(string _name, int _ssn, int _age, string _gender, string _address, string _phone)
{
name = _name;
ssn = _ssn;
age = _age;
gender = _gender;
address = _address;
phone = _phone;
}
const string getName(){ return name; }
const int getSSN(){ return ssn; }
const int getAge(){ return age; }
const string getGender(){ return gender; }
const string getAddress(){ return address; }
const string getPhone(){ return phone; }
void setName(const string name);
void setSSN(const int ssn);
void setAge(const int age);
void setGender(const string gender);
void setAddress(const string address);
void setPhone(const string phone);
protected:
string name;
int ssn;
int age;
string gender;
string address;
string phone;
};
class Student : public Person{
public:
Student(){ //default
gpa = 0;
major = "";
gradYear = 0;
}
Student(const Student& s) //copy
{
gpa = s.gpa;
major = s.major;
gradYear = s.gradYear;
}
Student(string _name, int _ssn, int _age, string _gender, string _address, string _phone, double _gpa, string _major, int _gradYear) : Person(_name, _ssn, _age, _gender, _address, _phone){
gpa = _gpa;
major = _major;
gradYear = _gradYear;
}
const double getGPA(){ return gpa; }
const string getMajor(){ return major; }
const int getGradYear(){ return gradYear; }
void setGPA(const double gpa);
void setMajor(const string major);
void setGradYear(const int gradYear);
protected:
double gpa;
string major;
int gradYear;
};
class Employee : public Person{
public:
Employee(){
department = "";
jobTitle = "";
yearHire = 0;
}
Employee(const Employee& e){
department = e.department;
jobTitle = e.jobTitle;
yearHire = e.yearHire;
}
Employee(string _name, int _ssn, int _age, string _gender, string _address, string _phone, string _department, string _jobTitle, int _yearHire) : Person(_name, _ssn, _age, _gender, _address, _phone){
department = _department;
jobTitle = _jobTitle;
yearHire = _yearHire;
}
const string getDepartment(){ return department; }
const string getJobTitle(){ return jobTitle; }
const int getYearHire(){ return yearHire; }
void setDepartment(const double department);
void setJobTitle(const double jobTitle);
void setYearHire(const double yearHire);
virtual double getAnnualWages() = 0; // a pure virtual function.
protected:
string department;
string jobTitle;
int yearHire;
};
class HourlyEmployee : public Employee{
public:
HourlyEmployee(){
hourlyRate = 0;
hoursWorked = 0;
unionDues = 0;
}
HourlyEmployee(const HourlyEmployee& he){
hourlyRate = he.hourlyRate;
hoursWorked = he.hoursWorked;
unionDues = he.unionDues;
}
HourlyEmployee(string _name, int _ssn, int _age, string _gender, string _address, string _phone, string _department, string _jobTitle, int _yearHire, double _hourlyRate, double _hoursWorked, double _unionDues):Employee(_name, _ssn, _age, _gender, _address, _phone, _department, _jobTitle, _yearHire){
hourlyRate = _hourlyRate;
hoursWorked = _hoursWorked;
unionDues = _unionDues;
}
const double getHourlyRate(){ return hourlyRate; }
const double getHoursWorked(){ return hoursWorked; }
const double getUnionDues(){ return unionDues; }
void setHourlyRate(const double hourlyRate);
void setHoursWorked(const double hoursWorked);
void setUnionDues(const double unionDues);
double getAnnualWages(){ return (hourlyRate*hoursWorked) + unionDues; }
protected:
double hourlyRate;
double hoursWorked;
double unionDues;
};
class SalariedEmployee : public Employee{
public:
SalariedEmployee(){ annualSalary = 0; }
SalariedEmployee(const SalariedEmployee& se){
annualSalary = se.annualSalary;
}
SalariedEmployee(string _name, int _ssn, int _age, string _gender, string _address, string _phone, string _department, string _jobTitle, int _yearHire, double _annualSalary):Employee(_name, _ssn, _age, _gender, _address, _phone, _department, _jobTitle, _yearHire)
{
annualSalary = _annualSalary;
}
double getAnnualSalary(){ return annualSalary; }
void setAnnualSalary(const double annualSalary);
double getAnnualWages(){ return annualSalary; }
protected:
double annualSalary;
};
class StudentEmployee : public Student, public HourlyEmployee{ //multiple inheritance of student and HourlyEmployee
public:
StudentEmployee(){}
StudentEmployee(const StudentEmployee& ste){}
StudentEmployee(string _name, int _ssn, int _age, string _gender, string _address, string _phone, string _department, string _jobTitle, int _yearHire, double _hourlyRate, double _hoursWorked, double _unionDues,double _gpa, string _major, int _gradYear): Student(_name, _ssn, _age, _gender, _address, _phone, _gpa, _major, _gradYear), HourlyEmployee(_name, _ssn, _age, _gender, _address, _phone, _department, _jobTitle, _yearHire, _hourlyRate, _hoursWorked, _unionDues){}
protected:
};
struct ListNode { //struct for list
Person p;
ListNode *link;
};
class SingleLinkedList{ //class to store all persons
public:
SingleLinkedList() {
front = rear = nullptr;
size = 0;
}
~SingleLinkedList() {
Clear();
}
ListNode* headptr(){
return front;
}
// Removes every node in the list. Frees my memory with delete.
void Clear() {
ListNode *node = front;
while (node != nullptr) {
ListNode *next = node->link;
delete node;
node = next;
}
front = rear = nullptr;
size = 0;
}
bool Contains(Person p) const {
ListNode *node = front;
while (node != nullptr) {
if ( node->p.getName() == p.getName() && node->p.getSSN() == p.getSSN() && node->p.getAge() == p.getAge() && node->p.getGender() == p.getGender() && node->p.getAddress() == p.getAddress() && node->p.getPhone() == p.getPhone() ) { return true; } //checks to see if all of the information for the person is the same
node = node->link;
}
return false;
}
void PopFront() {
assert(size > 0);
ListNode *obsolete = front;
if (front == rear) { // Exactly one element in our list
front = rear = nullptr;
}
else {
front = obsolete->link;
}
delete obsolete;
--size;
}
void PushBack(Person p) {
ListNode *insert = new ListNode(); // We need to delete this node later
insert->p = p;
insert->link = nullptr;
if (front == nullptr) {
front = rear = insert;
}
rear->link = insert;
rear = insert;
++size;
}
void PushFront(Person p) {
ListNode *insert = new ListNode();
insert->link = front; // This node will be the new front, connect the old front
insert->p = p;
if (front == nullptr) { // No elements currently in the list
front = rear = insert;
}
front = insert;
++size;
}
int Size() const {
return size;
}
void displayNode(ListNode *ptr)const{
cout << setw(3) << ptr->p.getName() << endl;
}
void displayList(ListNode *ptr)const{
if (ptr==nullptr){
cout << "Nothing to display!\n";
}
for (int i = 1; i <= size;i++){
displayNode(ptr);
ptr = ptr->link;
}
}
protected:
int size;
ListNode *front, *rear; // Front points to first node in list, rear to last
};
//main program
int main()
{
Person a("John Doe", 123456789, 26, "male", "123 Park Pl", "555-123-4567");
Person b("Jane Smith", 234567890, 21, "female", "66 Oak Ave", "123-456-7890");
Student s("Katie Brown",749374394, 18,"female","100 Curtain Rd","472-473-2038", 4.0, "Statistics", 2016);
SalariedEmployee se("Ross Gellar", 123056789, 55, "male", "123 5th Ave", "515-683-8924", "Science", "Professor", 1999, 50000);
HourlyEmployee he("Monica Bing", 123056589, 55, "female", "64 South Park Dr", "538-238-0747", "Dining", "Chef", 1999, 20.00, 40, 100);
StudentEmployee stuem("Cathrine Miller", 550789234, 25, "female", "218 Knickerbocker Way", "888-555-0000", "Fitness", "Trainer", 2015, 7.25, 10, 5, 3.2, "Computer Science", 2017);
SingleLinkedList x;
x.PushBack(a);
x.PushBack(b);
x.PushFront(s); //adds student f to the list of persons
x.displayList(x.headptr());
if (x.Contains(a) == true) //to show john doe is on list
cout << "This " << a.getName() << " is in the list.\n";
else
cout << "This " << a.getName() << " is NOT in the list.\n";
x.Clear(); //clears list
x.displayList(x.headptr());
if (x.Contains(a) == true) //shows john doe not on list because list was cleared
cout << "This " << a.getName() << " is in the list.\n";
else
cout << "This " << a.getName() << " is NOT in the list.\n";
cout<< "Annual Wages for "<<se.getName()<<" is "<<se.getAnnualWages()<<endl;
cout<< "Annual Wages for "<<he.getName()<<" is "<<he.getAnnualWages()<<endl;
cout<< "Annual Wages for "<<stuem.getName()<<" is "<<stuem.getAnnualWages()<<endl;
return 0;
}
在最后一个 cout 语句中,我的程序将给我错误消息 non-static member 'getName' found in multiple base-class subobjects of type person。我知道我必须将所有变量都引用到一个基类中,但我不知道该怎么做
最佳答案
在这种情况下,您必须使用 Person
的 virtual
继承。我想这就是这个作业的重点。你遇到了 The Diamond problem ,因为在 stuem.getName()
中,编译器不知道要使用两个底层 Person
基类实例的哪个实例。
使继承虚拟
将确保只有一个Person
对象:
class Student : virtual public Person { ... };
class Employee : virtual public Person { ... };
题外话,但此时您应该使用成员初始化列表并将 ""
分配给已经初始化且为空的 std::string
,嗯,看着不舒服。在 C++11 中可以默认复制构造函数:
Person(const Person& p) = default;
关于c++ - 错误信息 : non-static member found in multiple base-class subobjects of type person,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34228048/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!