繁体   English   中英

在 c++ 中调用继承函数和覆盖行为

[英]Calling inherited functions and overriding behavior in c++

为什么会出现这个错误 - 'void D::func(const D &)': cannot convert argument 1 from 'const C' to 'const D &'

如何纠正这个问题,我想从 Derived 的 func 调用 Base 的 func 但注意 func 是朋友 function?

class C
{
public:
    C()
    {
        cout << "in C ctor" << endl;
    }

    friend void func(const C& abc1)
    {
        cout << "in C's func" << endl;
    }
};

class D : public C
{
public:
    D()
    {
        cout << "in D ctor" << endl;
    }

    void func(const D& abc)
    {
        func(static_cast<const C&>(abc));
        cout << "in D's func" << endl;
    }
};

int main()
{
    D d;
    d.func(d);
}

为什么这个类似的例子会起作用 -

https://ideone.com/eNmvng

我不确定 syntaxis 对 function 可见性做了什么,但这有效:

class C
{
public:
    C()
    {
        cout << "in C ctor" << endl;
    }

    friend void func(const C& abc1);
};

void func(const C& abc1)
{
    cout << "in C's func" << endl;
}

class D : public C
{
public:
    D()
    {
        cout << "in D ctor" << endl;
    }

    void func(const D& abc)
    {
        ::func(abc);
        cout << "in D's func" << endl;
    }
};

int main()
{
    D d;
    d.func(d);
}

为了完整起见,这也适用:

class C
{
public:
    C()
    {
        cout << "in C ctor" << endl;
    }

    friend void func(const C& abc1)
    {
        cout << "in C's func" << endl;
    }
};

// Make function visible in global scope
void func(const C& abc1);

class D : public C
{
public:
    D()
    {
        cout << "in D ctor" << endl;
    }

    void func(const D& abc)
    {
        ::func(abc);
        cout << "in D's func" << endl;
    }
};

int main()
{
    D d;
    d.func(d);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM