android - 基类成员函数直接访问子类成员函数?

标签 android c++ inheritance virtual-functions

基类成员函数是否可以直接访问子类成员函数?

我从Android上找到了代码,BufferQueue继承了BnSurfaceTexture,有一个成员函数requestBuffer。

在基类BnSurfaceTexture中,我发现它只是直接调用requestBuffer。

基类BnSurfaceTexture是怎么知道函数“requestBuffer”的?

谢谢


基类成员函数:

status_t BnSurfaceTexture::onTransact(
    uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
{
    switch(code) {
        case REQUEST_BUFFER: {
            CHECK_INTERFACE(ISurfaceTexture, data, reply);
            int bufferIdx   = data.readInt32();
            sp<GraphicBuffer> buffer;
            /* it call requestBuffer directly */ <--------
            int result = requestBuffer(bufferIdx, &buffer);
            reply->writeInt32(buffer != 0);


子类声明&实现:

class BufferQueue : public BnSurfaceTexture {

private:
    virtual status_t requestBuffer(int slot, sp<GraphicBuffer>* buf);


status_t BufferQueue::requestBuffer(int slot, sp<GraphicBuffer>* buf) {
    ATRACE_CALL();
    ST_LOGV("requestBuffer: slot=%d", slot);
    Mutex::Autolock lock(mMutex);
    ...
    return NO_ERROR;
}

最佳答案

How does the base class BnSurfaceTexture know the function "requestBuffer"?

此函数必须至少在基类中声明(它可以用一些默认实现定义)并且它必须是虚拟的

因此,在编译时,编译器会发现存在这样的函数。
函数调用在运行时解析。这就是多态。


小例子:

class Base
{
public:
    virtual void f() { /* Base */ } // could be pure virtual
    virtual void g() { f(); };
};

class Derived: public Base
{
public:
    virtual void f() { /* derived */ }
};

当你有

Base* pB = new Derived;
pB->g();

g() 将调用 Derived::f;

关于android - 基类成员函数直接访问子类成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12953883/

相关文章:

java - 将儒略日期转换为以毫秒为单位的时间

c++ - 是否可以在 C++ 类中使用信号?

c++ - 嵌套模板类型转换

java - 具有抽象泛型和集合的 JPA 单表继承

JavaScript 扩展类

c# - OOD、继承和层父类(super class)型

android - 在中间修剪 TextView,保留结尾字符

android - 没有蓝牙的蓝牙的phonegap权限

android - 如何在 RecyclerView 上使用 SwipeDismissBehavior.OnDismissListener

c++ - Valgrind 挂起,没有输出