C++中虚函数重写,那么会出现多态的现象,普通方法重写不会出现多态的现象。
虚函数重写,那么如果以父类身份出现,始终调用的都是实际子类的方法,普通方法却不是。
具体为什么会有多态现象请参考 :http://sinfrancis.iteye.com/admin/blogs/484374
这里使用了三个类做实验,分别是Base1、Base3、Child2 ,Base3继承Base1,Child继承Base3,
Base1中含有一个普通方法和一个虚函数,并且Base3和Child2中都重写了这些方法代码如下:
Base1.h
/*
* Base1.h
*
* Created on: 2009-12-3
* Author: Administrator
*/
#ifndef BASE1_H_
#define BASE1_H_
class Base1 {
public:
Base1();
virtual ~Base1();
virtual int testVirtual();
int testCommon();
};
#endif /* BASE1_H_ */
Base1.cpp
/*
* Base1.cpp
*
* Created on: 2009-12-3
* Author: Administrator
*/
#include "Base1.h"
#include <iostream>
using namespace std;
Base1::Base1() {
// TODO Auto-generated constructor stub
}
Base1::~Base1() {
// TODO Auto-generated destructor stub
}
int Base1::testVirtual() {
cout << "Base1::testVirtual()" << endl;
return 1;
}
int Base1::testCommon(){
cout << "Base1::testCommon()" << endl;
return 1;
}
Base3.h
/*
* Base3.h
*
* Created on: 2009-12-3
* Author: Administrator
*/
#ifndef BASE3_H_
#define BASE3_H_
#include "Base1.h"
class Base3 :public Base1{
public:
Base3();
virtual ~Base3();
virtual int testVirtual();
int testCommon();
};
#endif /* BASE3_H_ */
Base3.cpp
/*
* Base3.cpp
*
* Created on: 2009-12-3
* Author: Administrator
*/
#include "Base3.h"
#include <iostream>
using namespace std;
Base3::Base3() {
// TODO Auto-generated constructor stub
}
Base3::~Base3() {
// TODO Auto-generated destructor stub
}
int Base3::testVirtual(){
cout << "Base3::testVirtual()" << endl;
return 1;
}
int Base3::testCommon(){
cout << "Base3::testCommon()" << endl;
return 1;
}
Child2.h
/*
* Child2.h
*
* Created on: 2009-12-3
* Author: Administrator
*/
#ifndef CHILD2_H_
#define CHILD2_H_
#include "Base1.h"
#include "Base3.h"
class Child2:public Base3{
public:
Child2();
virtual ~Child2();
virtual int testVirtual();
int testCommon();
};
#endif /* CHILD2_H_ */
Child2.cpp
/*
* Child2.cpp
*
* Created on: 2009-12-3
* Author: Administrator
*/
#include "Child2.h"
#include <iostream>
using namespace std;
Child2::Child2() {
// TODO Auto-generated constructor stub
}
Child2::~Child2() {
// TODO Auto-generated destructor stub
}
int Child2::testVirtual(){
cout << "Child2::testVirtual()" << endl;
return 0;
}
int Child2::testCommon(){
cout << "Child2::testCommon()" << endl;
return 0;
}
test.cpp
#include "Base3.h"
#include "Base1.h"
#include "Child2.h"
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
Base3 b3;
cout << sizeof(b3) << endl;
b3.testVirtual();
Base3 *b1 = new Child2();
b1->testVirtual();
b1->testCommon();
Base1 *b2 = new Child2();
b2->testVirtual();
b2->testCommon();
Child2 *c2 = new Child2();
c2->testVirtual();
c2->testCommon();
delete (b1);
delete (b2);
delete (c2);
}
运行结果:
4
Base3::testVirtual()
Child2::testVirtual()
Base3::testCommon()
Child2::testVirtual()
Base1::testCommon()
Child2::testVirtual()
Child2::testCommon()
分享到:
相关推荐
在C++编程语言中,虚函数(virtual function)是一个核心特性,它允许程序员实现多态性,这是面向对象编程中的重要概念。多态性意味着一个基类指针或引用可以调用不同派生类中重定义的同名成员函数。通过使用虚函数...
在C++编程语言中,虚函数(Virtual Functions)是一个核心特性,它允许...综上所述,这份5页的PDF资料很可能会深入讨论这些C++虚函数相关的概念,帮助读者理解和掌握如何在实际编程中利用虚函数实现灵活的代码设计。
在C++编程语言中,虚函数和纯虚函数是实现多态性的关键机制,但它们具有不同的特点和用途。首先,我们需要了解什么是虚函数。虚函数是基类中通过关键字virtual声明的成员函数,它允许派生类重新定义该函数,从而实现...
虚函数是C++中的一个关键特性,它允许我们实现多态性。在继承层次结构中,当基类指针或引用指向派生类对象时,通过虚函数调用,我们可以根据实际的对象类型来执行相应的函数实现。虚函数的关键在于虚函数表(vtable...
虚函数是C++中实现动态绑定(也称为运行时绑定或晚期绑定)的关键特性,它允许我们通过基类指针或引用调用派生类重写的成员函数。虚函数声明在基类中,通常带有`virtual`关键字,如: ```cpp class Base { public: ...
在C++编程语言中,虚函数(Virtual Functions)是一个核心特性,它允许我们实现多态性,这是面向对象编程中的重要概念。虚函数使得基类的指针或引用可以调用派生类重写后的成员函数,从而实现动态绑定。在“CPP.rar...
### C++中的虚函数与纯虚函数详解 #### 一、引言 在面向对象编程中,多态性是一项非常重要的特性,它允许程序通过基类指针或引用调用派生类的方法。C++中实现多态性的主要机制之一就是虚函数。虚函数和纯虚函数是...
在C++编程语言中,虚函数是实现多态性的重要机制,它允许子类对象通过基类指针或引用调用相应的重写方法。然而,并非所有函数都可以被声明为虚函数,因为它们的特性与虚函数的设计目标不兼容。以下是对C++中不可声明...
在C++编程语言中,虚函数(Virtual Functions)和纯虚函数(Pure Virtual Functions)是面向对象编程中的重要概念,它们对于实现多态性(Polymorphism)起着关键作用。下面将详细解释这两个概念以及它们的区别。 1....
在C++编程语言中,虚函数(Virtual Function)是一种非常重要的特性,它为面向对象编程中的多态性提供了支持。通过虚函数,子类可以重写父类的方法,使得在运行时能够根据对象的实际类型调用相应的方法实现。本文将...
4. **覆盖与继承**:派生类可以重写基类的虚函数,此时编译器会将派生类版本的函数地址放入派生类的虚函数表中,而不是基类的表。这样,通过派生类对象调用同一虚函数时,就会执行派生类的实现。 5. **纯虚函数**:...
纯虚函数是C++中一种特殊的虚函数,它在基类中声明但不提供具体的实现,其主要目的是为派生类提供一个必须重写的接口。通过在基类中声明纯虚函数,可以确保所有派生类都必须实现该函数,从而更好地支持多态性和接口...
在C++编程语言中,虚函数是实现多态性的重要机制,它允许通过基类指针或引用来调用派生类重写过的函数。然而,并非所有的成员函数都可以声明为虚函数。以下是对C++中不能声明为虚函数的五种类型的函数的详细解释: ...
虚函数是C++语言中的一种特殊函数,它可以被继承和重写。虚函数的实现方式是通过虚表来实现的。 8.4 纯虚函数与抽象类 纯虚函数是指没有函数体的虚函数,它只能被继承和重写。抽象类是指包含至少一个纯虚函数的类...
在C++编程语言中,成员函数分为三种类型:普通成员函数、虚函数和纯虚函数。这三种函数各自具有不同的特点和用途,对于理解和利用面向对象编程的关键特性至关重要。 1. **普通成员函数(Non-virtual Member ...
虚函数是C++编程语言中实现多态性的重要机制,多态性允许使用父类类型的指针或引用来调用子类中重写的成员函数,从而实现通用代码编写。通过虚函数,程序员可以设计出更加灵活和可扩展的类层次结构。 在C++中,虚...
本文档总结了C++中的重要知识点,涵盖了构造函数、虚函数、静态成员、重载、重写、成员函数、全局函数、友元函数、继承、面向对象特点、常引用和断言等方面的知识。 1. 构造函数不能声明为虚函数的原因:因为虚函数...
在C++编程语言中,多态...总结来说,C++中的多态性主要通过成员函数重载和虚函数实现,它提高了代码的可读性和可复用性,使得编写更通用的代码成为可能。在编写面向对象的C++程序时,理解并合理运用这些概念至关重要。
在C++中,只有类的成员函数可以声明为虚函数,因为虚函数主要用于处理有继承关系的类对象。普通函数不具备这种特性,无法体现多态。同时,静态成员函数也不能声明为虚函数,因为静态成员函数与特定的对象实例无关,...
C++通过虚函数实现多态,虚函数在基类中声明,并在派生类中可能被重写。通过基类指针或引用调用虚函数,会根据实际指向的对象类型调用相应的方法,实现动态绑定。 【C++标准模板库(STL)】 STL是C++库的一部分,包含...