`
jiq408694711
  • 浏览: 33683 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

C++之Virtual初探(一)

 
阅读更多
#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++中的virtuals

    C++中virtual知识点,全英文PPT 对于C++的初学者来说是非常好的资源,特别是正在学习外文教材的同学更有意义

    浅谈C++中virtual的三种用法

    virtual用法一 #include using namespace std; class A{ public: virtual void display(){ cout&lt;&lt;"A"&lt;&lt;ENDL&gt;display(); delete p; } int main(int argc,char* argv[]) { doDisplay(new B()); return 0; ...

    C++while循环初探

    信息学奥赛C++语言基础,while循环初探。 C++语言基础是信息学奥赛的基础,而循环又是C++语言的基础!

    C++析构函数使用virtual的原因

    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++C++C++C++C++C++C++

    深入理解c++中virtual关键字

    c++中的函数调用默认不适用动态绑定。要触发动态绑定,必须满足两个条件:第一,指定为虚函数;第二,通过基类类型的引用或指针调用。由此可见,virtual主要主要是实现动态绑定。 2.那些情况下可以使用virtual关键字...

    virtual c++ 6.0 MFC教程

    本书通过85个实例全面讲述了应用MFC进行Visual C++编程的思想。每个实例均以编写一个应用程序要走的步骤编写。全书共分四部分进行介绍,第一部分是基础知识,第二部分讲述用户界面的实例,第三部分讲述MFC内部处理...

    C++虚函数调用机制初探

    C++虚函数调用机制初探.pdf

    virtual c++编程实例

    api函数编程,后面有很多实例,讲解深入,适合开发人员中高级。

    C++中的虚函数(virtual function).doc

    C++中的虚函数(virtual function).doc virtual function

    virtual c++ 2005 助手,也可用于vc6.0

    可用于 microsoft virtual c++ 2005安装完毕后把解压包的VA_X.dll 复制到安装所在目录覆盖掉原来的就好了

    C++中virtual继承的深入理解

    本篇文章是对C++中的virtual继承进行了详细的分析介绍,需要的朋友参考下

    c++多线程编程初探

    c++多线程编程初探 HANDLE thread1; HANDLE thread2; thread1=CreateThread(NULL,0,Fun1,NULL,0,NULL); thread2=CreateThread(NULL,0,Fun2,NULL,0,NULL);

    C++ 中virtual 虚函数用法深入了解

    一、virtual修饰基类中的函数,派生类重写该函数: #include using namespace std; class A{ public: virtual void display(){ cout&lt;&lt;"A"&lt;&lt;ENDL&gt;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++小游戏c++小游戏c++小游戏...

    Virtual Machine Design and Implementation in 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.

Global site tag (gtag.js) - Google Analytics