面向对象——意图与逻辑(四)

原创 2015年11月20日 12:10:30

面向对象——意图与逻辑
面向对象——意图与逻辑 (二)
面向对象——意图与逻辑(三)
面向对象——意图与逻辑(四)

  1. public继承意味着is a(狗是动物,苹果是水果,子类是父类)

  2. virtual意味着接口必须被继承

  3. non-virtual函数意味着接口和实现都必须被继承

  4. non-pure virtual存在一个缺省算法(或者说父类要提供一个实现)

  5. pure virtual则是完全客制化(customerization)

  6. override (重写),通俗地理解就是覆盖(新版本覆盖旧版本);

观察一个类,应首先观察其成员变量,因为大部分类最终表达的仍是一个具有很多成员方法的对象的抽象,也即它是对成员变量,以及围绕成员变量的成员方法的封装。

在多类的、类间关系较为复杂时,进行每个类单独的设计与实现时,脑海中应有一个 UML,它就是建筑实施中的图纸。

虚函数不能是静态函数

虚函数(vptr:virtual pointer、vtbl:virtual table)(也包括 this 指针)都是对象(class objects)的概念;

而 static 是全体对象,是类的概念范畴,静态函数没有 this 指针;

C++中的get、set方法

首先一点,是类的默认构造函数会分别调用类成员变量的默认构造函数。

class Test
{
private:
    std::vector<double> _weights;
public:
    // 有点set方法的感觉
    std::vector<double>& weights() { return _weights;}
    // 而这是get方法
    const std::vector<double>& weights() const { return _weights;}
}

int main(int, char**)
{
    Test t;   // 会调用std::vector<double> 的默认构造函数,创建_weights对象实例

    std::vector<double> dvec{0., 1., 2.};
    t.weights() = dvec;        // 在客户端创建,然后set

    return 0;
}

如果这样理解还算正确的话,那么大量见诸于STL容器的两个版本的(mutable 和 non-mutable)的成员函数的作用便可显见。

Java/C++ 对多态的支持

Java 动态绑定,C++ 静态绑定(默认非多态),

这句话翻译过来即是:
父类引用指向子类对象,父类引用调用其子类中重写的方法时,Java默认多态,C++ 需显式的声明该方法为 virtual 虚函数。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

两个字符串相乘

题目: 给定两个用字符串表示的数字,返回用字符串表示的这两个数字的乘积。 注:数字是一个正整数,但有可能很大。 分析:既然数字有可能很大,那么就不能直接将两个数字相乘,这样有可能会导致溢出,...

C++ 设计模式 —— 访问者(Visitor)

访问者设计模式的实现借助于两个继承体系, (1)elements:一个是被操作的类(基类及其子类) (2)visitors:一个定义了一系列操作的访问者(基类及其子类) 访问者模式是一种行为型设计模式...

【软考】软件攻城狮考试(四)——面向对象

一、攻占第二城~~       前一篇《【软考】软件攻城狮考试(三)——软工》小编已经征服了这个国家,已经收获了很多的知识,接下来又是一个劲敌——面向对象,这个国家依旧是一个没有太大的实力,但是国土...

第八节 面向对象——抽象,多态

  • 2016年05月29日 12:29
  • 591KB
  • 下载

c#——面向对象

  • 2013年09月25日 21:44
  • 22.81MB
  • 下载

黑马程序员——面向对象<四> 笔记第六篇

多态、内部类 -----Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------...

面向对象的程序设计语言——C++

  • 2013年05月26日 18:38
  • 470KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:面向对象——意图与逻辑(四)
举报原因:
原因补充:

(最多只允许输入30个字)