Algorithm-VSM
view release on metacpan or search on metacpan
examples/corpus_with_java_and_cpp/RepeatInherit.cc view on Meta::CPAN
cout << "Years in job: " << yearsExperience << endl;
cout << "People skill: " << PeopleSkills[ (int) pSkill ]
<< endl;
cout << "Leadership quality: "
<< LeaderQualities[ (int) leadership ] << endl;
}
virtual ~Employee(){}
};
/////////////////////////// class Manager ///////////////////////////
class Manager : virtual public Employee { //(A)
Department dept; // note same name as dept in Employee
// but different meaning. Here it is dept
// supervised and not department worked in
protected:
bool employeeSatisfaction;
int yearsInManagement;
public:
Manager( string name,
string address,
EducationLevel education,
Department aDept )
: Employee( name, address, education ),
dept( aDept ),
yearsInManagement( 0 ),
employeeSatisfaction( false ) {}
// Since senior-level managers do not belong to any particular
// department, the next constructor is actually for them
Manager( string name,
string address,
EducationLevel education )
: Employee( name, address, education ) {}
virtual double productivityGainYtoY() { //(B)
int lastProd = dept.getProductionLastYear();
int prevProd = dept.getProductionPreviousYear();
return 100 * ( lastProd - prevProd ) / (double) prevProd;
}
void setDepartment( Department dept ){ this->dept = dept; }
int getYearsInManagement() { return yearsInManagement; }
void setYearsInManagement( int y ) { yearsInManagement = y; }
bool getEmployeeSatisfaction() { return employeeSatisfaction; }
void setEmployeeSatisfaction( bool satis ) {
employeeSatisfaction = satis;
}
virtual bool readyForPromotion(){
return ( ( yearsInManagement
>= MinYearsForPromotion ) ? true : false )
&& ( productivityGainYtoY() > 10 )
&& employeeSatisfaction;
}
void print() { Employee::print(); dept.print(); }
~Manager(){}
};
////////////////////// class ExecutiveManager ///////////////////////
// An ExecutiveManager supervises more than one department
class ExecutiveManager : public Manager {
short level;
vector<Department> departments; // depts in charge of
public:
// no-arg const. needed in the second example for type conversion
// from Manager to ExecutiveManager:
ExecutiveManager()
: Manager( "", "", eUnknown ),
Employee( "", "", eUnknown ), //(C)
level( 0 ) {}
ExecutiveManager( string name,
string address,
EducationLevel education,
short level )
: Manager( name, address, education ),
Employee( name, address, education ), //(D)
level( level )
{
departments = vector<Department>();
}
void addDepartment(Department dept){departments.push_back( dept );}
void setLevel( int lvl ) { level = lvl; }
// overrides Manager's productivityGainYtoY():
double productivityGainYtoY() { //(E)
double gain = 0.0;
vector<Department>::iterator iter = departments.begin();
while ( iter != departments.end() ) {
int lastProd = iter->getProductionLastYear();
int prevProd = iter->getProductionPreviousYear();
gain += ( lastProd - prevProd ) / prevProd;
}
return gain/departments.size();
}
void print() {
Employee::print();
cout << "Departments supervised: " << endl;
vector<Department>::iterator iter = departments.begin();
while ( iter != departments.end() )
iter++->print();
}
~ExecutiveManager(){}
};
///////////////////////// class SalesPerson /////////////////////////
class SalesPerson : virtual public Employee { //(F)
int salesLastYear;
int salesPreviousYear;
protected:
int yearsInSales;
public:
SalesPerson( string name,
string address,
EducationLevel education )
: Employee( name,
address,
education,
Department( "Sales" )),
salesLastYear( 0 ),
salesPreviousYear( 0 ),
yearsInSales( 0 ) {}
int getSalesLastYear() {
return salesLastYear;
}
void setSalesLastYear( int sales ) {
salesLastYear = sales;
( run in 0.557 second using v1.01-cache-2.11-cpan-39bf76dae61 )