summaryrefslogtreecommitdiffstats
path: root/Bachelor/Prog2/Codebeispiele/2_ch10/fig10_23_33/fig10_33.cpp
diff options
context:
space:
mode:
authorSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
committerSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
commit33613a85afc4b1481367fbe92a17ee59c240250b (patch)
tree670b842326116b376b505ec2263878912fca97e2 /Bachelor/Prog2/Codebeispiele/2_ch10/fig10_23_33/fig10_33.cpp
downloadStudium-master.tar.gz
Studium-master.tar.bz2
add new repoHEADmaster
Diffstat (limited to 'Bachelor/Prog2/Codebeispiele/2_ch10/fig10_23_33/fig10_33.cpp')
-rw-r--r--Bachelor/Prog2/Codebeispiele/2_ch10/fig10_23_33/fig10_33.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/Bachelor/Prog2/Codebeispiele/2_ch10/fig10_23_33/fig10_33.cpp b/Bachelor/Prog2/Codebeispiele/2_ch10/fig10_23_33/fig10_33.cpp
new file mode 100644
index 0000000..c8e9761
--- /dev/null
+++ b/Bachelor/Prog2/Codebeispiele/2_ch10/fig10_23_33/fig10_33.cpp
@@ -0,0 +1,100 @@
+// Fig. 10.33: fig10_33.cpp
+// Driver for Employee hierarchy.
+#include <iostream>
+
+using std::cout;
+using std::endl;
+using std::fixed;
+
+#include <iomanip>
+
+using std::setprecision;
+
+#include <vector>
+
+using std::vector;
+
+#include <typeinfo>
+
+#include "employee.h" // Employee base class
+#include "salaried.h" // SalariedEmployee class
+#include "commission.h" // CommissionEmployee class
+#include "baseplus.h" // BasePlusCommissionEmployee class
+#include "hourly.h" // HourlyEmployee class
+
+int main()
+{
+ // set floating-point output formatting
+ cout << fixed << setprecision( 2 );
+
+ // create vector employees
+ vector < Employee * > employees( 4 );
+
+ // initialize vector with Employees
+ employees[ 0 ] = new SalariedEmployee( "John", "Smith",
+ "111-11-1111", 800.00 );
+ employees[ 1 ] = new CommissionEmployee( "Sue", "Jones",
+ "222-22-2222", 10000, .06 );
+ employees[ 2 ] = new BasePlusCommissionEmployee( "Bob",
+ "Lewis", "333-33-3333", 300, 5000, .04 );
+ employees[ 3 ] = new HourlyEmployee( "Karen", "Price",
+ "444-44-4444", 16.75, 40 );
+
+ // generically process each element in vector employees
+ for ( int i = 0; i < employees.size(); i++ ) {
+
+ // output employee information
+ employees[ i ]->print();
+
+ // downcast pointer
+ BasePlusCommissionEmployee *commissionPtr =
+ dynamic_cast < BasePlusCommissionEmployee * >
+ ( employees[ i ] );
+
+ // determine whether element points to base-salaried
+ // commission worker
+ if ( commissionPtr != 0 ) {
+ cout << "old base salary: $"
+ << commissionPtr->getBaseSalary() << endl;
+ commissionPtr->setBaseSalary(
+ 1.10 * commissionPtr->getBaseSalary() );
+ cout << "new base salary with 10% increase is: $"
+ << commissionPtr->getBaseSalary() << endl;
+
+ } // end if
+
+ cout << "earned $" << employees[ i ]->earnings() << endl;
+
+ } // end for
+
+ // release memory held by vector employees
+ for ( int j = 0; j < employees.size(); j++ ) {
+
+ // output class name
+ cout << "\ndeleting object of "
+ << typeid( *employees[ j ] ).name();
+
+ delete employees[ j ];
+
+ } // end for
+
+ cout << endl;
+
+ return 0;
+
+} // end main
+
+/**************************************************************************
+ * (C) Copyright 1992-2003 by Deitel & Associates, Inc. and Prentice *
+ * Hall. All Rights Reserved. *
+ * *
+ * DISCLAIMER: The authors and publisher of this book have used their *
+ * best efforts in preparing the book. These efforts include the *
+ * development, research, and testing of the theories and programs *
+ * to determine their effectiveness. The authors and publisher make *
+ * no warranty of any kind, expressed or implied, with regard to these *
+ * programs or to the documentation contained in these books. The authors *
+ * and publisher shall not be liable in any event for incidental or *
+ * consequential damages in connection with, or arising out of, the *
+ * furnishing, performance, or use of these programs. *
+ *************************************************************************/ \ No newline at end of file