【发布时间】:2014-02-08 21:17:22
【问题描述】:
我编写了一个非常小的程序,您可以在其中输入您是男孩还是女孩,然后它会打印出一个声明。我的主要问题是,从我的代码中,除了从基类复制和粘贴之外,还有什么更简单的方法可以为女性编写代码。 这是我的代码
#include <iostream>
#include <string>
class Man{
protected:
std::string name;
public:
void getInfo(std::string hName){
name = hName;
}
void showInfo(){
std::cout << "Your name is: " << name << std::endl;
std::cout << "And you are a MAN" << std::endl;
}
};
class Women{ //is there an easier way to write this
protected:
std::string fem_name;
public:
void getfemInfo(std::string fhName){
fem_name = fhName;
}
void showfemaleInfo(){
std::cout << "Your name is: " << fem_name << std::endl;
std::cout << "And you are a Women" << std::endl;
}
};
class Human:public Man, public Women{
public:
Human(){}
};
int main(){
//local variables
std::string choice;
std::string tName;
//declaring objects
Human person;
//user interface
std::cout << "Please enter you name: ";
std::cin >> tName;
std::cout << "Are you a [boy/girl]: ";
std::cin >> choice;
//if handler
if (choice == "boy"){
person.getInfo(tName);
person.showInfo();
}else if(choice == "girl"){
person.getfemInfo(tName);
person.showfemaleInfo();
}
system("pause");
return 0;
}
当我尝试从类Man 派生类Woman 时,它使person.getInfo(tName) 和person.showInfo() 模棱两可。这是为什么?以及如何使这段代码更小(针对女性)。
【问题讨论】:
-
在深入了解多重继承之前,您应该认真学习单继承。提示:从另一个派生的类通常描述“是”关系。在您的示例中,人类类型的对象将同时是男人和女人,这没有什么意义。
-
我知道@Timbo 的单一继承
-
您不知道如何正确使用它。如果你是,你的 Human 将是 Man 和 Woman 的基类。只需忽略多重继承,直到您掌握了使用 C++ 进行的所有其他面向对象编程。您可能暂时不需要它(除了纯虚拟接口类)。
-
好的,但是有没有解决这个代码的方法,让类 Woman 更短@Timbo
-
@Jim 是的,有。将
Human设为基类(不是派生类),并将通用功能放在那里。
标签: c++ class multiple-inheritance derived-class