那些令人迷惑的技术概念

本立而道生,基本的事情做好了,才能产生最高原则。作为程序员,特别是新人,有些相似相关的技术概念,有时候令人抓狂,特别是面试的时候。对技术概念的理解,在一定程度上能反应一个人的水平。以下是一些我曾经迷惑的技术概念做出的理解,可能还存在偏颇,就当抛砖引玉。


重载(Overload)、覆写(Override)、隐藏、重写(Overwrite)
  1. 重载
    在OOP里,重载是作用在同一个类的多个同名函数,这些同名函数拥有不同的参数特征(参数的个数,类型),除此之外其他的特征无关紧要,如可以有不同的返回值类型。
  2. 覆写
    覆写是作用在继承体系里的不同类中,更具体来说是作用在子类,指的是子类对从父类继承来的虚函数做出符合子类需求的修改,这样我们可以说子类覆写了父类的函数,产生了父子两个不同的函数,父类对象调用的还是父类原来的函数,子类对象调用的将是覆写后的函数。
  3. 隐藏

    • 隐藏是作用在继承体系里的不同类中,跟覆写稍有区别,指的是子类对从父类继承来的参数特征相同非虚函数或者参数特征不同的同名函数的修改,这样修改后,父类的函数对子类来说是隐藏的,不可以直接调用,相当于父类的函数从可以被子类继承的变成父类完全私有的。
    • 从作用域的角度来说,局部变量在局部作用域隐藏全局变量的情况也属于隐藏

      int i = 1024;
      
      void swap(int& a, int& b)
      {
          int i = a; //局部i隐藏全局i
          a = b;
          b = i;
      }
      cout << i << endl; // 全局i
  4. 重写

    In computer data storage, overwriting is the process of replacing old information with new information.

    简单翻译一下,在计算机数据存储里,重写是一个将旧信息替换成新信息的处理过程。

  5. 区别

    • 重载和覆写的区别
      重载作用在同一个类(单个类),覆写作用在父子类(至少2个类)。
    • 覆写和隐藏的区别
      区别在于是否是参数特征相同的虚函数。
    • 重写和其他三者的区别
      其中最令人迷惑的是覆写和重写的区别,在OOP里,只有覆写,重写像是莫名其妙出现的,从我个人的经历来说,完全是自己给自己制造的麻烦。从广义上来说,重载、覆写、隐藏都属于重写,因此,讨论重写和其他三者的区别是没有必要的。

并发、并行、串行

先阐述一个重要概念,逻辑控制流:进程为每个程序提供了一种假象,好像程序在独占地使用处理器。处理器中程序计数器(PC)的指令序列叫做逻辑控制流。

  1. 并发
    一个逻辑控制流的执行在时间上与另一个流重叠,称为并发流,这两个流被称为并发的运行。多个流并发地执行的一般现象称为并发。简单的说就是如果两个流在时间上重叠,那么它们就是并发的。
  2. 并行
    如果两个流并发的运行在不同的处理器或者计算机上,那么它们是并行流。
  3. 串行
    单个逻辑控制流的不同部分或者多个逻辑控制流在运行上有先后顺序,即先运行A,A结束后才能运行B,这样的执行方式称为串行。
  4. 区别

    • 并发和并行
      并行流是并发流的真子集。在资源充足的条件下,两个逻辑控制流同时执行,则是并行,是并发的一个特例;资源不足的条件下,两个逻辑控制流交替执行。不管是同时执行,还是交替执行,都是并发。
    • 并行和串行
      逻辑控制流的执行方式不同,两个逻辑控制流A、B,如果A、B在执行顺序上,必须A先执行,B等待A执行结束才可以执行,则是串行。A、B在执行顺序上不必等待对方执行结束,则是并行。

你可能感兴趣的:(程序员,c++)