#include<iostream> namespace Yahoo{ char* homePageUrl; } namespace Google{ char* homePageUrl; } using namespace Google; using Google::homePageUrl; int main(){ Yahoo::homePageUrl ="a"; homePageUrl ="b"; return 0; }
#include <iostream> const int MAX = 500; enum semester{SUMMER=0,FALL,SPRING}; int main(){ semester x = SUMMER; return 0; }
int main(){ int a=5; int *b=&a; // pointer : the memory address of an object int &c=a; // reference : an alternative name to an object return 0; }
#include <iostream> #include <fstream> using namespace std; int main(){ ofstream outFile("my.out",ios::out); if(!outFile){ cout<<"cannot open my.out"<<endl; return 1; } int n = 50; outFile<<n<<endl; }
#include <iostream> #include <fstream> using namespace std; int main(){ ifstream inFile("my.out",ios::in); if(!inFile){ cout<<"cannot open my.out"<<endl; return 1; } int n; while (!inFile.eof()) { inFile >> n; cout<<n<<endl; } }
#include <iostream> #include <fstream> using namespace std; class Ferrari{ public: int W,H,L; char* model; /***key code***/ // friend ostream& operator<<(ostream &os, const Ferrari &obj){ // os<<"************"<<endl; // os<<"Ferrari"<<obj.model<<endl; // os<<"W"<<obj.W<<endl; // os<<"H"<<obj.H<<endl; // os<<"L"<<obj.L<<endl; // } }; /***alternative key code***/ ostream& operator<<(ostream &os, const Ferrari &obj){ os<<"************"<<endl; os<<"Ferrari"<<obj.model<<endl; os<<"W"<<obj.W<<endl; os<<"H"<<obj.H<<endl; os<<"L"<<obj.L<<endl; } int main(){ Ferrari myCar; myCar.model=(char*)"car"; cout<<myCar<<endl; return 0; }
inline: compiler replaces each function using its function body.
inline int sum(int a,int b){ return a+b; }
void func(const dataType& a){}
define two functions of same function name
int Max(int,int); int Max(int,int,int); int Max(float,int);
相同的函数名、参数类型、返回类型
#include <iostream> using namespace std; class Shape{ protected: int width,height; public: Shape(int w=0,int h=0){ width=w; height=h; } /***key code***/ virtual int area()=0; }; //正方形 class Rectangle:public Shape{ public: Rectangle(int w,int h):Shape{w,h}{} int area(){ return width*height; } }; //三角形 class Triangle:public Shape{ public: Triangle(int w,int h):Shape{w,h}{} //构造函数初始化 int area(){ return width*height/2; } }; int main(){ Shape * shape = new Rectangle(1,2); cout<<shape->area()<<endl; shape = new Triangle(1,2); cout<<shape->area()<<endl; return 0; }
malloc、delete、realloc、memset、memcopynew、delete
int main(){ int* x=(int*)malloc(sizeof(int)); free(x); int* y = new int; delete y; int *data = new int[10]; delete [] data; return 0; }
#include <iostream> using namespace std; int DivZero(int a,int b){ if(a<=0||b<<0) throw "All parameters should be > 0"; return a/b; } int main(){ try { cout<<DivZero(5,5)<<endl; } catch(const char * e){ cout<<"error"<<e<<endl; } // catch(const std::exception& e) // { // std::cerr << e.what() << '\n'; // } return 0; }
Rectangle();
Rectangle(int,int,int,int);
Rectangle::Rectangle(int x,int y,int h,int w){ xLow=x;yLow=y; height=h;width=w; }
May use member initialization list(more efficient)
Rectangle::Rectangle(int x,int y,int h,int w):xLow(x),yLow(y),height(h),width(w){}
Rectangle(const Rectangle&);
Rectangle::Rectangle(const Rectangle& _src){ xLow=_src.xLow; yLow=_src.y_Low; height=_src.height; width=_src.width; }
#ifndef RECTANGLE_H #define RECATANGLE_H class Rectangle{ Rectangle(); ~Rectangle(); bool operator==(const Rectanfle&); Rectagle& operator(const Rectangle&); } #endif
A mechanism to parameterize the target data type and instantiate it to a proper(恰当的) data type in compline time.
template <class T> T sum(T* data,const int SIZE){ T sum=0; for(int i=0;i<SIZE;i++){ sum+=data[i]; } return sum; }
emplate<class T> struct Z // template definition { void f() {} void g(); // never defined }; template struct Z<double>; // explicit(明确的,显式的) instantiation of Z<double> Z<int> a; // implicit(含蓄的,隐式的) instantiation of Z<int> Z<char>* p; // nothing is instantiated here p->f(); // implicit instantiation of Z<char> and Z<char>::f() occurs here. // Z<char>::g() is never needed and never instantiated: it does not have to be defined
Overloading(重载)相同函数名称 v.s. Overriding(重写)继承中
file,stirng
algrithms, data structure like vector, list, queues and stacks.