자바와 루비 버젼은 여기에 있습니다. 별 의미는 없고 Accelerated C++을 읽다가 만들어 보고 싶다는 생각에.. C++은 초보이기 때문에 잘못 짠 부분이 있을 수도 있습니다.
subject.hpp
#ifndef __SUBJECT #define __SUBJECT #include <iostream> #include <string> class Subject { private: std::string name; int score; public: Subject() { } Subject(std::string name, int score):name(name), score(score) { } std::string getName() const { return name; } void setName(std::string name) { this->name = name; } int getScore() const { return score; } void setScore(int score) { this->score = score; } }; #endif
subject.cpp
#include "subject.hpp"
subject_compare.hpp
#ifndef __SUBJECT_COMPARE #define __SUBJECT_COMPARE #include "subject.hpp" #include <functional> struct SubjectCompare: public std::binary_function<Subject, Subject, bool> { bool operator()(const Subject& lhs, const Subject& rhs) { return lhs.getScore() - rhs.getScore(); } }; #endif
score_card.hpp
#ifndef __score_card #define __score_card #include "subject.hpp" #include <iostream> #include <string> #include <vector> class ScoreCard { private: std::string studentName; std::vector<Subject> subjectArray; public: ScoreCard(std::string studentName, std::vector<Subject> subjectArray):studentName(studentName), subjectArray(subjectArray) { } double getTotal() const; double getAverage() const; std::string getStudentName() const { return studentName; } const Subject findBestSubject() const; }; #endif
score_card.cpp
#include "score_card.hpp" #include "subject.hpp" #include "subject_compare.hpp" #include <iostream> #include <string> #include <numeric> #include <iterator> #include <algorithm> using namespace std; static double subject_score_sum(double d, const Subject& s) { return s.getScore() + d; } double ScoreCard::getTotal() const { return accumulate(subjectArray.begin(), subjectArray.end(), 0.0, subject_score_sum); } double ScoreCard::getAverage() const { return getTotal() / subjectArray.size(); } const Subject ScoreCard::findBestSubject() const { return *max_element(subjectArray.begin(), subjectArray.end(), SubjectCompare()); }
scorecardmain.cpp
#include "subject.hpp" #include "score_card.hpp" #include <iostream> #include <string> #include <vector> using namespace std; int main() { vector<Subject> sub = vector<Subject>(); sub.push_back(Subject("Math", 90)); sub.push_back(Subject("English", 86)); sub.push_back(Subject("Physics", 88)); sub.push_back(Subject("Biology", 97)); ScoreCard sCard = ScoreCard("철수", sub); cout << sCard.getStudentName() << " 학생의 총점은 " << sCard.getTotal() << "입니다." << endl; cout << sCard.getStudentName() << " 학생의 평균점수는 " << sCard.getAverage() << "입니다." << endl; cout << "제일 잘한 과목은 " << sCard.findBestSubject().getName() << "로 " << sCard.findBestSubject().getScore() << "입니다." << endl; return EXIT_SUCCESS; }
소감 및 총평. 역시 C++은 sucks 하군요. 역시 Ruby가 좋군요. 역시 자바는 배워놓으면 안까먹는군요 ㅎㅎ
C++의 장점.
– 성능을 위한 여러가지 배려나 inforamtion hiding을 위한 다양한 배려가 돋보임.
이 짧은 코드에서 드러나는 C++의 단점
(1) #ifndef,#define,#endif 시리즈는 정말 짜증납니다. 왜왜왜왜왜왜왜왜왜왜왜왜왜 MS의 #pragma once 와 같은 멋진 키워드가 표준에 안들어 오는걸까요.
(2) 왜왜왜왜왜왜왜왜왜왜왜 functor는 그 자리에서 곧바로 익명클래스로 만들어서 넘길 수 없는겁니까..
(3) binary_function