1)说明:C#中在使用继承的过程中可能会出现子类对象转换为父类类型使用的情况,这个过程就叫做里氏替换原则。多用于将子类对象作为实参传入形参为父类类型的方法中,进而实现“多态”。2)扩展:在C++中亦叫做“赋值兼容性原则”,同样是实现多态的主要途径,其原理是通过虚函数表与VPTR指针实现“迟绑定”,进...
分类:
其他好文 时间:
2015-11-26 16:53:27
阅读次数:
127
#include using namespace std;class A {public: A(){} virtual void geta(){ cout using namespace std; class A { public: ...
分类:
其他好文 时间:
2015-11-26 01:12:04
阅读次数:
168
在c++开发中,用来做基类的析构函数一般都是虚函数。 为什么会这样呢?原因就是: 当用基类的指针删除一个派生类的对象时,如果基类的析构函数不是虚函数,那么派生类的析构函数不会调用(基类的析构函数会)。 而类的析构函数里一般是释放内存资源,析构函数不被调用的话会造成...
分类:
其他好文 时间:
2015-11-21 19:44:15
阅读次数:
132
我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明: 有下面的两个类:class ClxBase{public: ClxBase() {}; virtual ~ClxBase() {}; virtual...
分类:
编程语言 时间:
2015-11-20 17:06:45
阅读次数:
159
在实际运行中,虚函数所需的代价与内联函数有关。实际上虚函数不能是内联的。这是因为“内联”是指“在编译期间用被调用的函数体本身来代替函数调用的指令,”但是虚函数的“虚”是指“直到运行时才能知道要调用的是哪一个函数。”如果编译器在某个函数的调用点不知道具体是哪个函数被调用,你就能知道为什么它不会内联该函...
分类:
编程语言 时间:
2015-11-20 10:38:47
阅读次数:
148
并不是所有的类都要定义虚的析构函数.因为在C++中引入虚函数是有代价的.只要当你需要通过delete ptr删除一个对象的时候,你才需要定义虚的析构函数.看下面的代码段:class Base{public: Base(int i):m(i){} virtual void doS...
分类:
其他好文 时间:
2015-11-14 19:26:20
阅读次数:
294
这样做是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明: 有下面的两个类:classClxBase{public:ClxBase(){};virtual~Cl...
分类:
编程语言 时间:
2015-11-12 13:10:16
阅读次数:
219
只有用virtual声明类的成员函数,使之成为虚函数,不能将类外的普通函数声明为虚函数。因为虚函数的作用是允许在派生类中对基类的虚函数重新定义。所以虚函数只能用于类的继承层次结构中。 一个成员函数被声明为虚函数后,在同一类族中的类就不能再定义一个非virtual的但与该虚函数具有相同的参数(包括个....
分类:
编程语言 时间:
2015-11-09 22:40:59
阅读次数:
225
1.虚函数(impure virtual) C++的虚函数主要作用是“运行时多态”,父类中提供虚函数的实现,为子类提供默认的函数实现。 子类可以重写父类的虚函数实现子类的特殊化。 如下就是一个父类中的虚函数:class A{public: virtual void out2(string...
分类:
编程语言 时间:
2015-11-09 22:18:13
阅读次数:
250