最近在研究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均不能通过编译,求大神赐教