Professional C++ 01 A Crash Course in C++ 快速的C++基础知识复习
2017-02-27 23:12
826 查看
本章节主要是对C++基础知识的回顾,不会涉及太简单的知识点,比如=和==的区别,也不会涉及太复杂的知识,比如volatile关键字的作用。
(1) 空间命名规则
output:
foo() called in the mycode namespace
(2) 变量的定义, 操作符,循环语句全部都是基础知识。
(3) 枚举类型
(4) Stack 和 Heap的区别
stack分配的空间一般都是程序自动管理,heap用于new分配,delete删除。
(5)综合举例,一个管理员工系统
output:
all employee:
current employee:
Employee: Kleper, Scott
-------------------------
Current Employee
Employee Nmber: 1001
Salary: $100000
Employee: Solter, Nick
-------------------------
Current Employee
Employee Nmber: 1002
Salary: $11000
former employee:
Employee: Wallis, Greg
-------------------------
Former Employee
Employee Nmber: 1000
Salary: $30000
(1) 空间命名规则
#ifndef NAMESPACE_H #define NAMESPACE_H // namespaces.h namespace mycode { void foo(); } #endif // NAMESPACE_H
#include "namespace.h" #include <iostream> void mycode::foo() { std::cout << "foo() called in the mycode namespace" << std::endl; }
#include "namespace.h" using namespace std; using namespace mycode; int main(int argc, char *argv[]) { foo(); }
output:
foo() called in the mycode namespace
(2) 变量的定义, 操作符,循环语句全部都是基础知识。
(3) 枚举类型
typedef enum { kPieceTypeKing, kPieceTypeQueen, kPieceTypeRook, kPieceTypePawm } PieceT;
(4) Stack 和 Heap的区别
stack分配的空间一般都是程序自动管理,heap用于new分配,delete删除。
(5)综合举例,一个管理员工系统
#ifndef EMPLOYEE_H #define EMPLOYEE_H // employee.h #include <iostream> namespace Records { const int kDefaultStartingSalary = 30000; class Employee { public: Employee(); void promote(int inRaiseAmount = 1000); void demote(int inDemeritAmount = 1000); void hire(); void fire(); void display(); void setFirstName(std::string inFirstName); std::string getFirstName(); void setLastName(std::string inLastName); std::string getLastName(); void setEmployeeNumber(int inEmployeeNumber); int getEmployeeNumber(); void setSalary(int inNewSalary); int getSalary(); bool getIsHired(); private: std::string mFirstName; std::string mLastName; int mEmployeeNumber; int mSalary; bool fHired; }; } #endif // EMPLOYEE_H
#include "employee.h" #include <iostream> using namespace std; namespace Records { Employee::Employee() { mFirstName = ""; mLastName = ""; mEmployeeNumber = -1; mSalary = kDefaultStartingSalary; fHired = false; } void Employee::promote(int inRaiseAmount) { setSalary(getSalary() + inRaiseAmount); } void Employee::demote(int inDemeritAmount) { setSalary(getSalary() - inDemeritAmount); } void Employee::hire() { fHired = true; } void Employee::fire() { fHired = false; } void Employee::display() { cout << "Employee: " << getLastName() << ", " << getFirstName() << endl; cout << "-------------------------" << endl; cout << (fHired ? "Current Employee" : "Former Employee") << endl; cout << "Employee Nmber: " << getEmployeeNumber() << endl; cout << "Salary: $" <& 4000 lt; getSalary() << endl; cout << endl; } void Employee::setFirstName(std::__cxx11::string inFirstName) { mFirstName = inFirstName; } std::__cxx11::string Employee::getFirstName() { return mFirstName; } void Employee::setLastName(std::__cxx11::string inLastName) { mLastName = inLastName; } std::__cxx11::string Employee::getLastName() { return mLastName; } void Employee::setEmployeeNumber(int inEmployeeNumber) { mEmployeeNumber = inEmployeeNumber; } int Employee::getEmployeeNumber() { return mEmployeeNumber; } void Employee::setSalary(int inNewSalary) { mSalary = inNewSalary; } int Employee::getSalary() { return mSalary; } bool Employee::getIsHired() { return fHired; } }
#ifndef DATABASE_H #define DATABASE_H #include "employee.h" #include <iostream> // Database.h namespace Records { const int kMaxEmployees =100; const int kFirstEmployeeNumber = 1000; class Database { public: Database(); ~Database(); Employee &addEmployee(std::string inFirstName, std::string inLastName); Employee &getEmployee(int inEmployeeNumber); Employee &getEmployee(std::string inFirstName, std::string inLastName); void displayAll(); void displayCurrent(); void displayFormer(); protected: Employee mEmployees[kMaxEmployees]; int mNextSlot; int mNextEmployeeNumber; }; } #endif // DATABASE_H
// Database.cpp #include <iostream> #include <stdexcept> #include "database.h" using namespace std; namespace Records { Database::Database() { mNextSlot = 0; mNextEmployeeNumber = kFirstEmployeeNumber; } Database::~Database() { } Employee &Database::addEmployee(string inFirstName, string inLastName) { if (mNextSlot >= kMaxEmployees) { cerr << "There is no more room to add the new employee!" << endl; throw exception(); } Employee &theEmployee = mEmployees[mNextSlot++]; theEmployee.setFirstName(inFirstName); theEmployee.setLastName(inLastName); theEmployee.setEmployeeNumber(mNextEmployeeNumber++); theEmployee.hire(); return theEmployee; } Employee &Database::getEmployee(int inEmployeeNumber) { for (int i = 0; i < mNextSlot; i++) { if (mEmployees[i].getEmployeeNumber() == inEmployeeNumber) { return mEmployees[i]; } } cerr << "No empolyee with employee number " << inEmployeeNumber << endl; throw exception(); } Employee &Database::getEmployee(string inFirstName, string inLastName) { for (int i = 0; i < mNextSlot; i++) { if (mEmployees[i].getFirstName() == inFirstName && mEmployees[i].getLastName() == inLastName) { return mEmployees[i]; } } cerr << "No match with name " << inFirstName << " " << inLastName << endl; } void Database::displayAll() { for (int i = 0; i < mNextSlot; i++) { mEmployees[i].display(); } } void Database::displayCurrent() { for (int i = 0; i < mNextSlot; i++) { if (mEmployees[i].getIsHired()) { mEmployees[i].display(); } } } void Database::displayFormer() { for (int i = 0; i < mNextSlot; i++) { if (!mEmployees[i].getIsHired()) { mEmployees[i].display(); } } } }
#include <iostream> #include "database.h" using namespace std; using namespace Records; int main(int argc, char *argv[]) { Database myDB; Employee &emp1 = myDB.addEmployee("Greg", "Wallis"); emp1.fire(); Employee &emp2 = myDB.addEmployee("Scott", "Kleper"); emp2.setSalary(100000); Employee &emp3 = myDB.addEmployee("Nick", "Solter"); emp3.setSalary(10000); emp3.promote(); cout << "all employee: " << endl; cout << "current employee: " << endl; cout << endl; myDB.displayCurrent(); cout << endl; cout << "former employee: " << endl; cout << endl; myDB.displayFormer(); }
output:
all employee:
current employee:
Employee: Kleper, Scott
-------------------------
Current Employee
Employee Nmber: 1001
Salary: $100000
Employee: Solter, Nick
-------------------------
Current Employee
Employee Nmber: 1002
Salary: $11000
former employee:
Employee: Wallis, Greg
-------------------------
Former Employee
Employee Nmber: 1000
Salary: $30000
相关文章推荐
- C++基础知识复习&总结
- Java基础基础知识复习(输入输出流)-01
- C++基础知识复习之--顺序表学生成绩管理系统
- c/c++ 复习基础要点01-const指针、指针函数 函数指针、new/delete与malloc/free区别与联系
- 复习C++基础知识-----“我的第一本C++”读书笔记4(终篇)
- c++常见基础知识快速浏览
- C++OOP基础知识点1)——inline vs macro
- C++复习 01 快速入门
- C++基础知识 课堂复习
- 【C++基础复习01】结构体和链表
- C++基础知识复习--函数模板
- 复习C++基础知识-----“我的第一本C++”读书笔记1
- C++基础知识复习 const关键字
- 【笔记】C++自学笔记系列01:基础知识
- 复习C++一些基础知识
- C++基础知识复习--字符串
- JS一起学01:css复习、js基础知识、事件、参数、函数、网页换肤、if判断、className问题、浏览器执行顺序
- C++基础知识复习--函数重载
- [003]Reference in C++---C++引用基础知识篇
- C/C++基础知识01