填错了用户名 2015-07-05 13:09 采纳率: 0%
浏览 3329

C++ using 父类成员函数与子类类名相同怎么办

最近在研究using的使用,除了能够引入某些作用域中的变量和函数外,另一个用途是子类修改父类成员函数的访问权限
先看代码吧:

 #include<iostream>
using namespace std;

class Base
{
public:
    Base()
    {
        cout<<"Base Constructor!"<<endl;
    }

    void func(int n = 1)
    {

        cout<< "Base func ! n = "<<n<<endl;
    }
    void func(float f)
    {
        cout<<"Base func ! f = "<<f<<endl;
    }
    void Derived(int a)
    {
        cout<<"Base Child !"<<endl;
    }

};


class Derived : private Base
{
public:
    using Base::func;//成功引入父类所有的func
    using Base::Derived;//失败,由于与子类构造函数重名
    void func(int n = 1)
    {
        cout<<"Derived func ! n = "<<n<<endl;
    }

    Derived()
    {
        cout<< "Derived Constructor !" <<endl;
    }
};




int main(int argc,char **argv)
{
    cout<<__FILE__<<':'<<__func__<<" begin!"<<endl;
    Derived c;
    c.func(1);
    c.func(1.1f);
    c.Base::Derived(123);//失败
    return 0;
}

其中父类的成员函数不与子类类名相同的都可以成功引进来,但是如果和子类类名相同(Derived)那么编译就会报错说已经指定了构造函数,在C++98和C++11均不能通过编译,求大神赐教

  • 写回答

2条回答

  • XCRobert 2015-07-05 15:19
    关注

    最好父类成员函数名不要与子类名相同

    评论

报告相同问题?

悬赏问题

  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题