/**
作者: 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;
}