Professional C++ 01 A Crash Course in C++ 快速的C++基础知识复习
来源:互联网 发布:淘宝介入卖家不举证 编辑:程序博客网 时间:2024/05/22 02:24
本章节主要是对C++基础知识的回顾,不会涉及太简单的知识点,比如=和==的区别,也不会涉及太复杂的知识,比如volatile关键字的作用。
(1) 空间命名规则
#ifndef NAMESPACE_H#define NAMESPACE_H// namespaces.hnamespace 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: $" << 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.hnamespace 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
0 0
- Professional C++ 01 A Crash Course in C++ 快速的C++基础知识复习
- Professional C++ (Chapter 1 - A Crash Course in C++)
- object-c基础知识复习
- C基础知识复习(上)
- C基础知识复习(下)
- 我的复习--C语言--part1基础知识
- c++crash的原因
- 复习C++基础知识-----“我的第一本C++”读书笔记1
- 复习C++基础知识-----“我的第一本C++”读书笔记2
- 复习C++基础知识-----“我的第一本C++”读书笔记3
- C语言复习之结构体基础知识
- C语言复习之结构体基础知识
- C语言复习之结构体基础知识
- C语言复习之结构体基础知识
- 【学习笔记四】C语言基础知识复习
- C基础的复习
- C的复习
- C的复习2
- STM32L4超低功耗特性概述
- 函数:将网页提取的cookie转换成python用来模拟登录的cookie
- OC与JS交互 -- 原生
- 7.环境搭建-flume安装
- hibernate正向生成数据库表以及配置——hibernate.cfg.xml
- Professional C++ 01 A Crash Course in C++ 快速的C++基础知识复习
- Java的浅拷贝与深拷贝
- kaptcha 验证码使用
- php排序
- JavaScript Object使用toString
- autoconf 与 automake
- 关于三目运算符与左右位移操作符
- 关于django中session id与cookie的理解
- mp4/ts流中的extra data