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
原创粉丝点击