#include<iostream>
using namespace std;
class A{
public:
virtual ~A(){f();}
virtual void f(){cout<<"This is A virtual"<<endl;}
void g(){cout<<"This is A no-virtual"<<endl;}
};
class B:public A{
public:
~B(){f();}
virtual void f(){cout<<"This is B virtual"<<endl;}
void g(){cout<<"This is B no-virtual"<<endl;}
};
int main(){
//如果是virtual方法的话,和Java中多态现象一样
A* p = new B;
p->f();
A* q = new A;
q->f();
//如果不是virtual方法,那么只看引用是什么类型
A* w = new A;
w->g();
A* x = new B;
x->g();
cout<<"====delete all object!==="<<endl;
delete p;
delete q;
delete w;
delete x;
return 0;
}
再看一个例子:
#include <iostream>
using namespace std;
class Base{
public:
Base(int j) : i(j) {}
virtual ~Base() {}
void func1(){
cout<<"Base func1"<<endl;
i *= 10;
//但是Base的func2是virtual,所以要看真正的对象是什么类型
//如果是Child类型对象,那么就应该调用Child的func2函数
func2();
}
int getValue(){
return i;
}
protected:
virtual void func2(){
i++;
cout<<"Base func2"<<endl;
}
protected:
int i;
};
class Child : public Base {
public:
Child(int j) : Base(j) {}
void func1(){
cout<<"Child func1"<<endl;
i *= 100;
func2();
}
protected:
void func2(){
i += 2;
cout<<"Child func2"<<endl;
}
};
int main(void){
Base *pb = new Child(1);
pb->func1(); //func1不是虚函数,所以这里引用是Base类型,就调用Base的func1函数
cout<<pb->getValue()<<endl;
delete pb;
return 0;
}
分享到:
相关推荐
C++中virtual知识点,全英文PPT 对于C++的初学者来说是非常好的资源,特别是正在学习外文教材的同学更有意义
virtual用法一 #include using namespace std; class A{ public: virtual void display(){ cout<<"A"<<ENDL>display(); delete p; } int main(int argc,char* argv[]) { doDisplay(new B()); return 0; ...
信息学奥赛C++语言基础,while循环初探。 C++语言基础是信息学奥赛的基础,而循环又是C++语言的基础!
C++析构函数使用virtual的原因
C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++
c++中的函数调用默认不适用动态绑定。要触发动态绑定,必须满足两个条件:第一,指定为虚函数;第二,通过基类类型的引用或指针调用。由此可见,virtual主要主要是实现动态绑定。 2.那些情况下可以使用virtual关键字...
本书通过85个实例全面讲述了应用MFC进行Visual C++编程的思想。每个实例均以编写一个应用程序要走的步骤编写。全书共分四部分进行介绍,第一部分是基础知识,第二部分讲述用户界面的实例,第三部分讲述MFC内部处理...
C++虚函数调用机制初探.pdf
api函数编程,后面有很多实例,讲解深入,适合开发人员中高级。
C++中的虚函数(virtual function).doc virtual function
可用于 microsoft virtual c++ 2005安装完毕后把解压包的VA_X.dll 复制到安装所在目录覆盖掉原来的就好了
本篇文章是对C++中的virtual继承进行了详细的分析介绍,需要的朋友参考下
c++多线程编程初探 HANDLE thread1; HANDLE thread2; thread1=CreateThread(NULL,0,Fun1,NULL,0,NULL); thread2=CreateThread(NULL,0,Fun2,NULL,0,NULL);
一、virtual修饰基类中的函数,派生类重写该函数: #include using namespace std; class A{ public: virtual void display(){ cout<<"A"<<ENDL>display(); delete p; } int main(int argc,char* argv[])...
c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏...
This guide provides an in-depth look at the construction and underlying theory of a fully functional virtual machine and an entire suite of related development tools.