面向对象学习之一:
特点:
继承
封装
多态
类与对象
类实例化就叫对象(NEW出来)
静态成员函数和静态成员变量
普通的成员函数无法访问静态成员变量, 需要静态成员函数。静态成员函数专门用来改变静态成员变量的值。
普通函数前加static,没有this指针
不依赖实例化对象,不需要new出来
1.new出来的变量,一般放置在堆内存中,尽量用完销毁(有垃圾回收机制也尽量)
2.栈内存一般是函数的参数值和局部变量
3.全局区(static)存放全局变量和静态变量的存储
构造函数和虚函数
析构函数和构造函数
构造函数:完成对象的初始化,名字与类名相同,只运行一次
无返回值-----可以重载
析构函数:没有参数和没有任何返回类型,析构函数在对象销毁的时候自动调用
拷贝构造函数:其唯一的形参必须是引用,但并不限制为const,一般普遍的会加上const限制。
主要用于类的传递
CExample(const CExample& C)
函数的名称必须和类名称一致
const:限定不可更改
虚函数-运行期多态
虚函数对应一个虚指针,虚指针其实是存储在对象的内存空间的。如果构造函数是虚函数,就需要通过虚函数表中对应的虚函数指针(编译期间生成属于类)来调用,可对象目前还没有实例化,也即是还没有内存空间,何来的虚指针,所以构造函数不能是虚函数;
虚函数的作用在于通过父类的指针或者引用来调用它的成员函数的时候,能够根据动态类型来调用子类相应的成员函数。而构造函数是在创建对象时自动调用的,不可能通过父类的指针或者引用去调用,所以构造函数不能是虚函数;
virtual 关键字-虚函数
重载与重写
重载
定义相同的方法名、参数不同
是在一个类中
参数个数、参数类型、参数的顺序可以不同
修饰范围没有要求
重写
子类与父类之间的
子类重写父类的方法
父类子方法参数必须相同(顺序、个数等)
重写方法的修饰范围大于被重写方法的修饰范围
重载是编译时的多态性,重写是运行时的多态性
友元函数 -关键字friend
友元函数是一个不属于类成员的函数,但它可以访问该类的私有成员。
-----------------------暂定