用C+实现简单Java程序+;(抽象类)
爪哇(工场) 抽象类Personnell与Manager和Worker的子类。getAnnualIncome()是抽象函数用C+实现简单Java程序+;(抽象类),java,c++,arrays,polymorphism,abstract-class,Java,C++,Arrays,Polymorphism,Abstract Class,爪哇(工场) 抽象类Personnell与Manager和Worker的子类。getAnnualIncome()是抽象函数 Personnell employee[] = { new Manager("Thomas", "Nasa", 1337, 250000), new Worker("Simon", "Netto", 1336, 6.98, 36) }; System.out.println("Name\t\tAnnual Income"); for (int i = 0;
Personnell employee[] =
{
new Manager("Thomas", "Nasa", 1337, 250000),
new Worker("Simon", "Netto", 1336, 6.98, 36)
};
System.out.println("Name\t\tAnnual Income");
for (int i = 0; i < employee.length; i++)
{
System.out.printf(employee[i].getName() + "\t\t£%.2f%n", employee[i].getAnnualIncome());
}
经理有
double getAnnualIncome(); //declaration
double Manager::getAnnualIncome() //definition
{
return this->salary_;
}
工人有
double getAnnualIncome(); //declaration
double Worker::getAnnualIncome() //definition
{
return (this->hourlyRate_ * this->hoursPerWeek_)*52;
}
按照ajb的说法,输出为:
姓名工作年收入
汤姆·艾伯顿400000
<西蒙> QuiimIART 400000//C++中应该是7280</p>< p>,当你创建一个带有基类对象类型的数组时,会发生一个叫做对象切片的东西:即当你声明一个抽象类的数组,并在其中放置子类时,只存储抽象部分(即纯的虚拟)。正如您所看到的,您不能调用纯虚拟函数,因为
employee
数组中的对象是切片对象。您不能拥有Personnell
对象数组,因为Personnell
是一种抽象类型,编译器不知道每个数组元素的大小。所以你需要使用指针。(它在Java中工作,因为实际上Java自动使用指针。)
将employee
定义更改为
Personnell *employee[] =
{
new Manager ("Tom", "Ableton", 1234, 400000),
new Worker ("Simon","QuickiMart", 666, 40, 3.50)
};
而不是
cout << employee[i].getName() << "\t\t"<< employee[i].getDept()<<"\t\t"<< employee[0].getAnnualIncome() << endl;
(最后一个
employee[0]
是一个输入错误,应该改为employee[i]
;另外,for(int i=0;i<3;i++)
看起来像是一个输入错误,因为数组中只有两个元素。)您可以添加类的定义和实现吗,太好了?您是否同时在管理器
和工作者
中覆盖了人员所有::getAnnualIncome
?我没有尝试过这个,但是。。。尝试将Personnell employee[]=
更改为Personnell*employee[]=/code>,在员工数组值中的经理
和员工
前面放置一个new
,并将employee[i].getName()
更改为employee[i]->getName()
[其他字段也是如此]。您不能拥有Personnell
对象的数组,因为这是抽象的,编译器不知道每个数组元素的大小。这就是为什么你需要指针。P.S.我不是C++专家,所以我不能保证我有正确的答案。谢谢,这使它更接近工作。但是,所有数组都带有数组中第一项的值。i、 e所有的年收入都是40万如果是这样的话,你能把我的名字加到名单上吗
Personnell *employee[] =
{
new Manager ("Tom", "Ableton", 1234, 400000),
new Worker ("Simon","QuickiMart", 666, 40, 3.50)
};
cout << employee[i].getName() << "\t\t"<< employee[i].getDept()<<"\t\t"<< employee[0].getAnnualIncome() << endl;
cout << employee[i]->getName() << "\t\t"<< employee[i]->getDept()<<"\t\t"<< employee[i]->getAnnualIncome() << endl;