一、在分析AndroidR 电池上层部分看到 virtual虚函数和override。
二、什么是虚函数:
在面向对象的C++语言中,虚函数(virtual function)是一个非常重要的概念。虚函数是指一个类中你希望重载的成员函数 ,当你用一个基类指针或引用 指向一个继承类对象的时候,调用一个虚函数时, 实际调用的是继承类的版本。
三、实例测试更能直观的理解,在android设备上运行。
1、virtual_demo.cpp
#include <iostream>
using namespace std;
class Parent
{
public:
Parent();
virtual ~Parent();
void FunctionA();
protected:
virtual void FunctionB();
};
Parent::Parent()
{
printf("Parent Destructor!\n");
}
Parent::~Parent()
{
printf("Parent ~Destructor!\n");
}
void Parent::FunctionA()
{
printf("This is parent,functionA\n");
FunctionB();
}
/*
void Parent::FunctionB()
{
printf("This is parent,functionB\n");
}
*/
class Child:public Parent
{
public:
Child();
virtual ~Child();
void FunctionB() override;
};
Child::Child()
{
printf("Child Destructor!\n");
}
Child::~Child()
{
printf("Child ~Destructor!\n");
}
void Child::FunctionB()
{
printf("This is child,functionB\n");
}
int main(void)
{
class Child mChild;
mChild.FunctionA();
return 0;
}
2、Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := virtual_demo
LOCAL_SHARED_LIBRARIES:=liblog libc libcutils
LOCAL_SRC_FILES := virtual_demo.cpp
include $(BUILD_EXECUTABLE)
3、adb push到机器里面去运行,运行结果如下,可以看到基类里面的FunctionA调用的是子类的FunctionB。
四、参考文章
C++中virtual(虚函数)的用法 - 唯一诺 - 博客园
C++成员函数后面加override_方洪斌的博客-CSDN博客_函数后面加override