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

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 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题