|
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 声明只适用于继承,而不适用于包含。
|
|