Accelerated 13 Using inheritance and dynamic binding
来源:互联网 发布:李洪成排盘软件下载 编辑:程序博客网 时间:2024/06/10 08:10
Core.h
#ifndef GUARD_core_h#define GUARD_core_h// Core.h#include <string>#include <iostream>#include <vector>class Core { public: Core():midterm(0),final(0) { } Core(std::istream& is) { read(is); } std::string name() const; virtual std::istream& read(std::istream&); virtual double grade() const; protected: // accessible to derived classes std::istream& read_common(std::istream&); double midterm,final; std::vector<double> homework; private: // accessible only to Core std::string n;};std::istream& read_hw(std::istream&, std::vector<double>&);double grade(double, double, std::vector<double>);bool compare(const Core*, const Core*);#endif
Core.cpp
// source file Core-related#include "Core.h"#include "/home/rhk/workspace/4_grade/median.h"using std::string; using std::vector;using std::istream;string Core::name() const { return n; }double Core::grade() const { return ::grade(midterm, final, homework);}istream& Core::read_common(istream& in) { // read and store the student's name and exam grades in >> n >> midterm >> final; return in;}istream& Core::read(istream& in) { read_common(in); read_hw(in, homework); return in;}double grade(double midterm, double final, vector<double> homework) { return 0.2 * midterm + 0.4 * final + 0.4 * median(homework);}// read homworksistream& read_hw(istream& in, vector<double>& hw) { if (in) { // get rid of previous contents hw.clear(); // read homework grades double x; while (in >> x) hw.push_back(x); // clear the stream so that input will work for the next student in.clear(); } return in;}bool compare(const Core* cp1, const Core* cp2) { return cp1->name() < cp2->name();}
Grad.h
#ifndef GUARD_grad_h#define GUARD_grad_h#include "Core.h"class Grad:public Core { public: Grad(): thesis(0) { } Grad(std::istream& is) { read(is); } double grade() const; std::istream& read(std::istream&); private: double thesis;};#endif
Grad.cpp
// source file of Grad-related#include "Core.h"#include "Grad.h"#include <algorithm>using std::istream;using std::min;istream& Grad::read(istream& in) { read_common(in); in >> thesis; read_hw(in, homework); return in;}double Grad::grade() const { return min(Core::grade(), thesis);}
func.h
#ifndef GUARD_func_h#define GUARD_func_h#include <iostream>std::istream& read_hw(std::istream&, std::vector<double>&);#endif
func.cpp
// source file for functions#include "func.h"using std::istream; using std::vector;istream& read_hw(istream& in, vector<double>& hw) { if (in) { // get rid of previous contents hw.clear(); // read homework grades double x; while (in >> x) hw.push_back(x); // clear the stream so that input will work for the next student in.clear(); } return in;}
main.cpp
#include "Core.h"#include "Grad.h"#include <algorithm>#include <ios>#include <iomanip>#include <stdexcept>using std::string; using std::cout; using std::cin;using std::endl; using std::vector; using std::max;using std::streamsize; using std::sort; using std::setprecision; using std::domain_error;int main() { vector<Core*> students; Core* record; char ch; string::size_type maxlen = 0; while (cin >> ch) { if (ch == 'U') record = new Core; else record = new Grad; record->read(cin); maxlen = max(maxlen, record->name().size()); students.push_back(record); } sort(students.begin(), students.end(), compare); for (vector<Grad>::size_type i = 0; i < students.size(); ++i) { cout << students[i]->name() << string(maxlen + 1 - students[i]->name().size(), ' '); try { double final_grade = students[i]->grade(); streamsize prec = cout.precision(); cout << setprecision(3) << final_grade << setprecision(prec) << endl; } catch (domain_error e) { cout << e.what() << endl; } } return 0;}
阅读全文
0 0
- Accelerated 13 Using inheritance and dynamic binding
- Using inheritance and dynamic binding
- C++ - 继承(inheritance) 和 动态绑定(dynamic binding) 简介
- Polymorphism, Dynamic Typing, and Dynamic Binding
- Using JavaFX Properties and Binding
- Java - What is Static and Dynamic binding
- Dynamic Binding
- Accelerated C++ 5 Using sequential containers and analyzing strings
- 多态和动态绑定(polymorphism and dynamic binding)
- Dynamic Binding and Casting for the Extensibility of OOP
- 虚函数与动态绑定 / Virtual function and Dynamic Binding
- Chapter9. Objective-C learning note 2. Dynamic Typing and Binding
- Using Data Dictionary and Dynamic Performance Views
- Using Dynamic Vertex and Index Buffers
- Static Binding versus Dynamic Binding
- C++ dynamic binding
- KnockoutJs dynamic Binding
- Accelerated rendering and compositing
- FPGA实现BT.1120编码
- 卸载kaldi并重新安装
- css实现div垂直水平居中
- Java垃圾回收机制(1)- GC的工作原理
- POJ3126 Prime Path —— BFS + 素数表
- Accelerated 13 Using inheritance and dynamic binding
- int x/*test*/y;的结果是?
- 自定义标题栏
- html旋转动画
- App瘦身
- response对象的使用
- POJ 3253
- 声明和定义
- 单例模式的C#实现