示例#1
0
文件: main5.cpp 项目: cthomasyeh/ioi3
int main()
{
   CommissionEmployee commissionEmployee( 
      "Sue", "Jones", "222-22-2222", 10000, .06 );
   BasePlusCommissionEmployee *basePlusCommissionEmployeePtr = nullptr;

   // aim derived-class pointer at base-class object
   // Error: a CommissionEmployee is not a BasePlusCommissionEmployee
   basePlusCommissionEmployeePtr = &commissionEmployee;
} // end main
int main(int argc, const char* argv[]) {
    // set floating-point output formatting
    std::cout << std::fixed << std::setprecision(2);

    // create derived-class objects
    SalariedEmployee salariedEmployee("John", "Smi.hpp", "111-11-1111", 800);
    CommissionEmployee commissionEmployee("Sue", "Jones", "333-33-3333", 10000,
                                          .06);
    BasePlusCommissionEmployee basePlusCommissionEmployee(
        "Bob", "Lewis", "444-44-4444", 5000, .04, 300);

    std::cout << "Employees processed individually using static binding:\n\n";

    // output each Employee's information and earnings using static binding
    salariedEmployee.print();
    std::cout << "\nearned $" << salariedEmployee.earnings() << "\n\n";
    commissionEmployee.print();
    std::cout << "\nearned $" << commissionEmployee.earnings() << "\n\n";
    basePlusCommissionEmployee.print();
    std::cout << "\n\nearned $" << basePlusCommissionEmployee.earnings()
              << "\n\n";

    // create vector of three base-class pointers
    std::vector<Employee*> employees(3);

    // initialise vector with Employees
    employees[0] = &salariedEmployee;
    employees[1] = &commissionEmployee;
    employees[2] = &basePlusCommissionEmployee;

    std::cout << "Employees processed polymorphically via dynamic binding:\n\n";

    // call virtualViaPointer to print each Employee's information
    // and earnings using dynamic binding
    std::cout << "Virtual function call made off base-class pointers:\n\n";

    for (size_t i = 0; i < employees.size(); ++i) {
        virtualViaPointer(employees[i]);
    }

    // call virtualViaReference to print each Employee's information
    // and earnings using dynamic binding
    std::cout << "Virtual function calls made off base-class references:\n\n";

    for (size_t i = 0; i < employees.size(); ++i) {
        virtualViaReference(*employees[i]);  // not dereferencing
    }

    return 0;
}
int main(int argc, const char *argv[]) {
    // create base-class object
    CommissionEmployee commissionEmployee("Sue", "Jones", "222-22-2222", 10000,
                                          .06);

    // create base-class pointer
    CommissionEmployee *commissionEmployeePtr = 0;

    // create derived-class object
    BasePlusCommissionEmployee basePlusCommissionEmployee(
        "Bob", "Lewis", "333-33-3333", 5000, .04, 300);

    // create dervied-class pointer
    BasePlusCommissionEmployee *basePlusCommissionEmployeePtr = 0;

    // set floating-point output formatting
    std::cout << std::fixed << std::setprecision(2);

    // output objects using static binding
    std::cout << "Invoking print function on base-class and derived-class "
              << "\nobject with static binding\n\n";
    commissionEmployee.print();  // static binding
    std::cout << "\n\n";
    basePlusCommissionEmployee.print();  // static binding

    // output objects with dynamic binding
    std::cout << "\n\n\nInvoking print function on base-class and "
              << "derived-class \nobjects with dynamic binding";

    // aim base-class pointer at base-class object and print
    commissionEmployeePtr = &commissionEmployee;
    std::cout << "\n\nCalling virtual function print with derived-class "
              << "pointer\nto derived-class object invokes derived-class "
              << "print function:\n\n";
    basePlusCommissionEmployeePtr->print();

    // aim base-class pointer at derived-class object and print
    commissionEmployeePtr = &basePlusCommissionEmployee;
    std::cout << "\n\nCalling virtual function print with base-class pointer"
              << "\nto derived-class object invokes derived-class "
              << "print function:\n\n";

    // polymorphism; invokes BasePlusCommissionEmployee's print;
    // base-class pointer to derived-class object
    commissionEmployeePtr->print();

    std::cout << std::endl;

    return 0;
}