#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`关键字是实现多态性(Polymorphism)的关键机制,这对于理解和编写面向对象的代码至关重要。本篇将详细讲解C++中的`virtual`函数、构造函数与析构函数,以及继承与重写的概念。 1. `Virtual`...
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++作为一种强大的面向对象编程语言,其核心特性之一便是支持多态性(polymorphism)。多态性允许程序员使用基类类型的指针或引用调用派生类的成员函数,这种能力极大地增强了程序的灵活性与可扩展性。本文旨在探讨C++...
c++中的函数调用默认不适用动态绑定。要触发动态绑定,必须满足两个条件:第一,指定为虚函数;第二,通过基类类型的引用或指针调用。由此可见,virtual主要主要是实现动态绑定。 2.那些情况下可以使用virtual关键字...
本书通过85个实例全面讲述了应用MFC进行Visual C++编程的思想。每个实例均以编写一个应用程序要走的步骤编写。全书共分四部分进行介绍,第一部分是基础知识,第二部分讲述用户界面的实例,第三部分讲述MFC内部处理...
在C++中,如果一个类通过不同的路径继承了同一个基类,不使用`virtual`关键字会导致每个路径都有一个独立的基类实例。而使用`virtual`,所有派生类共享一个基类实例,避免了内存的冗余和可能的冲突。 此外,`...
总的来说,Virtual C++ 6.0是C++编程历史上的一个里程碑,它以其优秀的IDE、强大的MFC库和完善的STL支持,影响了一代又一代的程序员。即使在今天,通过像“Visual C++ 6.0.7z.001”这样的打包文件,我们仍然能够回溯...
当您在运行 Microsoft Windows XP 在计算机上运行 Microsoft Internet Explorer 6 时, 您可能会收到类似于以下...pure virtual function call 此外,当您单击 确定 以关闭该错误信息时可能会关闭 Internet Explorer 6。
在C++编程语言中,`virtual`关键字是一个非常重要的特性,它主要用于实现多态性,这是面向对象编程的一个核心概念。下面将详细解释`virtual`虚函数的用法及其重要性。 一、虚拟函数(Virtual Function) 虚函数的...
C++实现虚函数的关键机制是虚拟表(Virtual Table,简称vtable)。每个包含虚函数的类都有一个对应的vtable,其中存储了虚函数的地址。每个类的对象在其构造函数被调用之前初始化一个指向vtable的指针,称为虚表指针...
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++11》是一本专注于C++11标准新特性的解析与应用的书籍,其中涉及了语言的诸多改进和优化。在第二章中,主要讨论了如何通过`final`和`override`关键字确保类的稳定性和兼容性。 在C++11之前,多态性依赖...
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.