曲径通幽论坛
标题:
保护派生或私有派生时如何让基类方法在类外可用?
[打印本页]
作者:
easy
时间:
2013-12-13 13:30
标题:
保护派生或私有派生时如何让基类方法在类外可用?
Q : 保护派生或私有派生时如何让基类方法在类外可用?
A: 使用保护派生或私有派生时,基类的公有成员将成为保护成员或私有成员。那么如何让基类的方法在派生类外可用呢?有两种方法。
方法一:定义一个使用该基类方法的派生类方法
假设 Student 类是 valarray ()的一个派生类,现在希望 Student 类能够使用 valarray 类中的 sum() 方法,那么可以在 Student 类的声明中声明一个同名的 sum() 方法,然后像下面这样定义该方法:
double Student::sum() const // public Student 方法
{
return std::valarray<double>::sum(); //使用私有继承方法
}
复制代码
像上面的做法,就是将私有继承的方法,封装到派生类中 public 里的一个同名方法中。
方法二:使用 using 声明
将函数调用包装在另一个函数调用中,可以像
名称空间
那样使用一个
using
声明,用来指出派生类可以使用特定的基类成员,即使是私有派生也适用。
假设希望通过 Student 类能够使用 valarray 中的 min() 和 max() 方法,那么可以在声明 Student 的头文件的公有部分加入如下 using 声明:
class Student : private std::string, private std::valarray<double>
{
... ...
public:
using std::valarray<double>::min;
using std::valarray<double>::max;
... ...
};
复制代码
上述 using 声明使得 valarray<double>::min() 和 valarray<double>::max() 可用,使用它们就像是直接使用 Student 的公有方法一样。
需要注意的是,using 声明只使用成员名(
没有圆括号、函数特征标 和 返回类型
)。又比如,为使用 Student 类可以使用 valarray 中的 operator[]() 方法,那么如下声明:
using std::valarray<double>::operator[];
复制代码
using 声明只适用于继承,而不适用于包含。
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/)
Powered by Discuz! X3.2