/** 做者: cwl 内容: 类的符合,继承,委托 */ #include <bits/stdc++.h> using namespace std; class Father { public: Father(const string & _name = string("default")): name(_name), age(10) {} Father(const Father&); Father& operator = (const Father&); virtual void show() { cout << "father" << endl; } string name; int age; }; class Son: public Father { public: void show() { cout << "son" << endl; } }; void change1(Father &fa) { fa.show(); } void change2(Son &son) { son.show(); } int main() { /** template<class T> class queue { protected: deque<T>c; public: bool empty() const { return c.empty(); } size_type size() const { return c.size(); } reference front() { return c.front(); } reference back() { return c.back(); } void push(const value_type &x) { c.push_back(x); } void pop() { c.pop_front(); } }; 【复合】咱们的Queue里面有deque,咱们经过一个功能已经很强大的类 deque实现queue,只开放了一部分接口。能够称为符合 同时也是一种设计模式 Adapter 1,构造和析构的关系 构造由内向外,析构有外向内。和继承的构造析构类比理解 class String { public: ///... private: StringRep* rep; }; class StringRep { ///... }; 【委托】只是一种说法。这样设计可以减低耦合性。 有一个指针指向实现了。方便切换 【继承】 class Base { }; class Node : public Base { }; 能够用is a 来解释,苹果是一种水果, 继承的核心是搭配虚函数调用 class Shape { public: virtual void draw() const = 0; //纯虚 virtual void error(const string &msg); //虚函数 int objetID() const; //普通函数 }; 【1】非虚函数,你不但愿子类复写这个函数,override 【2】虚函数,但愿子类来定义 【3】存虚函数,但愿子类必定去复写,应为你没有定义 类的变量继承的是内存的实例,在内存中子类有父类的变量(若是能够继承获得) 类的函数继承的是使用权 继承测试 */ Father fa("test"); Son son; /** fa.show(); ///father son.show(); ///son change1(fa); ///father change1(son); ///father ///change2(fa); ///非法 change2(son); ///son */ /// void change1(Father &fa) /// { /// fa.show(); /// } ///不一样点 change1(son); ///父类有virture输出son, 没有输出father ///和于其符合,virtual但愿重写 ///关于虚函数的虚表部分作一些简单了解 ///http://www.cnblogs.com/lihaosky/articles/1606502.html return 0; }