摘要:
16.1.1 函数模板 tmplate+模板参数列表 template<typename T> int compare(const T &v1, const T &v2){ if(v1<v2) return -1; if(v2<v1) return 1; return 0; } 模板参数列表不能为空 阅读全文
摘要:
15.7.1 虚析构函数 在基类中将析构函数定义为虚函数,用动态绑定机制来保证执行正确的析构函数版本 class Base{ public: virtual ~Quote() = default; //动态绑定析构函数 }; //Derived是Base的派生类 Base *itemP = new 阅读全文
摘要:
public\private\protected成员 访问说明符 对类成员 对类用户 对派生类成员 对派生类用户 public 可见 可见 可见 可见 private 可见 不可见 不可见 不可见 protected 可见 不可见 可见 基类中:不可见/派生类中:可见 对protected最后一点的 阅读全文
摘要:
类的关系图: 一、作用域与名字查找 1.作用域的嵌套 派生类的作用域嵌套在基类之内 Bulk_quote bulk; cout<< bulk.isbn(); 名字isbn解析过程: 因为我们是通过Bulk_quote的对象调用isbn的,所以首先在Bulk_quote中查找,这一步没有找到名字isb 阅读全文
摘要:
类的继承关系图: 抽象基类 含有纯虚函数的类成为抽象基类,用来表示一个通用概念 如此处Disc_count表示折扣书籍的通用概念,它的虚函数net_price为纯虚函数,表示折扣方案,它的派生类如Bulk_quote表示每个具体的折扣方案 纯虚函数只需声明,不必实现,末尾加上=0 抽象基类不能实例化 阅读全文
摘要:
核心思想 面向对象程序设计(object-oriented programming)的核心思想是 封装:类的接口和实现分离 继承:定义相似的类型并对相似关系建模 动态绑定:在一定程度上忽略类的区别,而以统一的方式使用它们 继承 在C++中,将类型相关的函数与派生类不做改变直接继承 的函数区分对待。 阅读全文
摘要:
15.2.1 定义基类 类的定义 定义Quote类 class Quote{ public : Quote() = default; Quote(const string &book, double sales_price): bookNo(book), price(sales_price) {} 阅读全文
摘要:
调用时解析 使用基类的引用或指针调用虚函数时,会发生动态绑定 所以,知道运行时才会知道到底调用了哪个版本的虚函数 因此: 虚函数是在运行时才被解析 虚函数必须被定义 注意: 普通类型(非指针和引用类型)调用虚函数时不会发生动态绑定 class A{ public : //基类的print是虚函数 v 阅读全文