摘要:
首先谨记两条规则: 1.可以将一个派生类的对象的地址赋值给其基类的指针变量,但是只能通过这个指针访问派生类中由基类继承来的隐藏对象,不能访问派生类中的新成员。同样也不可反过来做。 2.派生类对象可以初始化基类的引用。引用是别名,但这个别名只能包含派生类对象中的由基类继承来的隐藏对象。 多态的实现是遵 阅读全文
摘要:
多态性1.编译时的多态性:通过函数的重载和运算符的重载实现2.运行时的多态性:在程序执行前,无法根据函数名和参数来确定该调用哪个函数,必须在程序执行过程中,根据执行的具体情况来动态的确定。它是通过类继承关系和虚函数来实现的。目的也是建立一种通用的程序。通用性是程序追求的主要目标之一。 虚函数是类的成 阅读全文
摘要:
子类函数名与父类函数名相同,子类函数将隐藏所有父类的同名函数基类与派生类赋值兼容规则1.派生类的对象可以赋值给基类的对象,这时是吧派生类对象中从对应基类中继承来的隐藏对象赋值给基类对象(对象的切片)。反过来则不行,因为派生类的新成员无值可赋。2.可以将一个派生类的对象的地址赋值给其基类的指针变量,但 阅读全文
摘要:
钻石(菱形)继承 如图,B,C继承了A,D继承了B,C 在这种情况下,如果D类的对象通过B、C两个不同的作用域调用A的数据成员,将会产生两个 不同的A的数据成员值 如下(Grandfather对应A,a是其公有数据成员,Father1,Father2对应B、C,son对应D的对象,) 可以看到有两个 阅读全文
摘要:
派生类构造函数各部分的执行次序为1.调用基类的构造函数,按他们在派生类定义的先后顺序,顺序调用。2.调用成员对象的构造函数,按他们在类定义中声明的先后顺序,顺序调用3.派生类的构造函数体中的操作 在派生类构造函数中,只要基类不是使用缺省构造函数,都要显式给出基类名和参数表如果基类没有定义构造函数,则 阅读全文
摘要:
首先说两点:①无论何种继承方式,子类都无法继承父类的构造和析构函数 ②保护方法只能在类作用域内被调用,任何对象都无法直接调用保护方法。 共有public、protected、private三种继承方法 1.子类作public继承时,可以通过对象直接调用自己和父类的公有方法 父类的保护成员只能在类作用 阅读全文
摘要:
new operator new操作符 operator new 操作符new placement new 定位new 这里的new是new 操作符。这里共有两个步骤的工作要做: ①为对象申请空间 ②调用构造函数初始化内存中的对象 new 操作符总是做这两件事,不可以任何方式改变其行为。 但是你可以 阅读全文
摘要:
通常定义变量或者对象,编译器在编译时都可以根据该变量或对象的类型知道所需内存空间的大小,从而系统在适当的时候为他们分配确定的存储空间,这种内存分配被称为静态存储分配。 有些操作对象只有在程序运行时才能确定,这样编译器在编译时就无法为他们预定存储空间,只能在程序运行时,系统根据运行时的要求进行内存分配 阅读全文
摘要:
类模板 以一个链表类模板作为例子 实现了前插、尾插、print 和删除功能 运行结果 阅读全文
摘要:
函数模板解决通用问题,将类型当作参数设计,使用方法如下 如下的Min函数 (注:使用typename时记得引入头文件<typeinfo>) 模板不支持隐式转换,如在只存在函数模板1的时候 cout<<Min(15,12.2)<<endl; 是无法通过的,只有进行显式传递类型, cout<<Min<i 阅读全文