多态性


  面向对象程序设计的多态性指一种行为对应着多种不同的实现方法。多态性包括静态多态性(编译时的多态性)和动态多态性(运行时的多态性)。
  重载指同一个函数名有多种不同的实现方法。C++的多态性表现在函数重载上。
  1. 支持静态联编以实现静态多态性。静态联编是指程序运行之前就已经确定该同名接口调用的哪一个版本。比如通过函数重载和运算符重载实现静态联编。在同一个类、无继承关系的平行类、不属于任何类的普通函数中,同一个函数名对应不同的实现代码,这种多态性称为静态多态性。
  2. 支持动态联编以实现动态多态性。动态联编是在程序运行时才可以确定该同名接口究竟来自于基类还是某一个派生的子类。动态联编是在共有继承的前提下通过虚函数、基类的指针或引用实现的。
  动态联编效率不如静态联编,但是它通过高度抽象提高程序的灵活性和可扩充性。

局部变量


  C++语言提供了局部变量更加灵活的方式,局部变量可以随用随定义,作用域为该变量定义点到该变量所在的最小程序块末的范围。
  当两个变量同名,一个全局变量,一个局部变量,则在局部变量的作用域范围内该同名全局变量不可见,但是在变量名字前加域解析符::可以访问隐藏的同名全局变量。域解析附只能加在全局变量前,不可以放在局部变量的前面

static关键字


  static可修饰函数和变量,即有静态函数和静态变量。
  变量前加上static后就变成了静态变量,会被存放在静态存储区,在整个程序运行期间一直存在。局部静态变量作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域结束。但是当局部静态变量离开作用域后,并没有销毁,而是仍然驻留在内存当中,只不过我们不能再对它进行访问,直到该函数再次被调用,并且值不变。全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。
  在函数返回类型前加static,函数就定义为静态函数。函数的定义和声明在默认情况下都是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。函数的实现使用static修饰,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突。
  static`定义在一个类内部时,表明该变量是类的静态成员,可以很好的解决同一个类的不同对象之间数据共享的问题,该成员只有一份拷贝,在类的任何对象被创建之前就已经存在,因此其初始化工作是在编译时创造并初始化的,而不是构造函数。类的公有静态成员最好的访问方式是:`类名::公有静态成员变量名
  static`加在类的成员函数之前可将该函数声明为静态成员函数,可以在未定义类的任何对象的情况下,调用静态成员函数对类的私有静态成员进行操作。调用方式:`类名::静态成员函数

引用和指针


  从C++编译器的角度来看,在编译器内部,使用指针常量(常指针)来实现引用。因此引用的本质是指针常量。
  引用有内存吗?? 从编译器的角度来看,引用是用指针实现的,因此引用占有实际的内存空间。从用户使用的角度来看,引用是一个变量的别名,相当于一个变量有两个名字,引用不占内存空间。实际上是占有内存的!

  指针是一个变量,变量里存放的是别的变量的地址,因为存放的是一个地址,因此指针变量占用的内存空间是固定的:32位编译器中指针变量占4字节,64位占8字节。

  指针对变量的操作是间接操作,引用对变量的操作是直接操作。

分类: C/C++

0 条评论

发表评论

邮箱地址不会被公开。