簡體   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