has-a关系——包含对象成员的类
2013-10-17 16:03
309 查看
#ifndef _STUDENT_H_ #define _STUDENT_H_ #include <iostream> #include <string> #include <valarray> class Student { private: typedef std::valarray<double> ArrayDb; std::string name; //contained object ArrayDb scores; //contained object //private method for scores output std::ostream & arr_out(std::ostream & os) const; public: Student() : name("Null Student"), scores() {} explicit Student(const std::string & s) : name(s), scores() {} explicit Student(int n) : name("Nully"), scores(n) {} Student(const std::string & s, int n) : name(s), scores(n) {} Student(const std::string & s, const ArrayDb & a) : name(s), scores(a) {} Student(const char * str, const double * pd, int n) : name(str), scores(pd, n) {} ~Student() {} double Average(void) const; const std::string & Name(void) const; double & operator[](int i); const double & operator[](int i) const; //friends //inout friend std::istream & operator>>(std::istream & is, Student & stu); //1 word friend std::istream & getline(std::istream & is, Student & stu); //1 line //output friend std::ostream & operator<<(std::ostream & os, const Student & stu); }; #endif
#include "student.h" using std::ostream; using std::istream; using std::endl; using std::string; //public methods double Student::Average(void) const { if(scores.size() > 0) { return scores.sum() / scores.size(); } else { return 0; } } const string & Student::Name(void) const { return name; } double & Student::operator[](int i) { return scores[i]; } const double & Student::operator[](int i) const { return scores[i]; } //private method ostream & Student::arr_out(ostream & os) const { int i; if(scores.size() > 0) { for(i = 0; i < scores.size(); i++) { os << scores[i] << " "; if(i % 5 == 4) { os << endl; } } if(i % 5 != 0) { os << endl; } } else { os << "empty array"; } return os; } //friend methods istream & operator>>(istream & is, Student & stu) { is >> stu.name; return is; } istream & getline(istream & is, Student & stu) { getline(is, stu.name); return is; } ostream & operator<<(ostream & os, const Student & stu) { os << "Scores for " << stu.name << ":\n"; stu.arr_out(os); return os; }
#include <iostream> #include "student.h" using std::cin; using std::cout; using std::endl; void set(Student & sa, int n) { cout << "Please enter the student's name: "; getline(cin, sa); cout << "Please enter " << n << " quiz scores:\n"; for(int i = 0; i < n; i++) { cin >> sa[i]; } while(cin.get() != '\n') { continue; } } const int pupils = 3; const int quizzes = 5; int main(void) { Student ada[pupils] = {Student(quizzes), Student(quizzes), Student(quizzes)}; for(int i = 0; i < pupils; i++) { set(ada[i], quizzes); } cout << "\nStudent List:\n"; for(int i = 0; i < pupils; i++) { cout << ada[i].Name() << endl; } cout << "\nResults:"; for(int i = 0; i < pupils; i++) { cout << endl << ada[i]; cout << "average: " << ada[i].Average() << endl; } cout << "Done.\n"; return 0; }
相关文章推荐
- 包含对象成员的类 vs普通公有继承的派生类 and 对象成员vs私有继承
- CSS 选择器——(标记、包含关系、类、id、分组、伪类及伪对象选择器)
- 面向对象_继承中成员变量的关系
- 如何导出标准模板库(STL)类的实例化和包含STL类对象数据成员的类
- “黑马程序员”声明类Student,包含3个成员变量:name、age、score,创建5个对象装入TreeSet,按照成绩排序输出结果(考虑成绩相同的问题)
- json数组和json对象的包含关系
- Paragraph 对象'代表所选内容、范围或文档中的一个段落。Paragraph 对象是 Paragraphs 集合的一个成员。Paragraphs 集合包含所选内容、范围或文档中的所有段落。
- 光脚丫学LINQ(033):建立映射关系的两个实体类必须分别包含一个主键列成员
- 包含对象成员的派生类的构造函数与析构函数
- (一四六)包含对象成员的类——第十四章
- 类的那些事(包含智能提示小图标,与对象的关系等)
- java 面向对象关系is-a has-a like-a
- iOS开发中 类、对象、实例变量、成员变量、属性变量等区别和关系
- C++构造函数执行顺序测试(成员包含其他类对象的时候)
- const成员函数和const对象的调用关系
- IOS开发中 类、对象、实例变量、成员变量、属性变量等区别和关系
- OOD沉思录 之 类和对象的关系--包含关系3
- OOD沉思录 之 类和对象的关系--包含关系4
- 类与对象的关系 局部变量 成员变量
- OOD沉思录 --- 类和对象的关系 --- 包含关系1