我有一个包含声明为protected
的属性的父类。我知道protected
成员可以在子类中访问。但是如何在孙子类中访问相同内容。
例如,如何访问width
类中的TooSmall
?
考虑以下代码示例:
#include <iostream>
using namespace std;
class Box {
protected:
double width;
};
class SmallBox:Box {
protected:
double height;
};
class TooSmall:SmallBox {
public:
void setSmallWidth( double wid );
void setHeight(double hei);
double getSmallWidth( void );
double getHeight(void);
};
double TooSmall::getSmallWidth(void) {
return width ;
}
void TooSmall::setSmallWidth( double wid ) {
width = wid;
}
void TooSmall::setHeight( double hei ) {
height = hei;
}
double TooSmall::getHeight(void) {
return height;
}
// Main function for the program
int main() {
TooSmall box;
box.setSmallWidth(5.0);
box.setHeight(4.0);
cout << "Width of box : "<< box.getSmallWidth() << endl;
cout << "Height of box : "<< box.getHeight() << endl;
return 0;
}
是否可以在子类中使父类属性
public
成为可能? 。 最佳答案
您的问题是您是从基类私有(private)继承的,因此基类的公共(public)成员和 protected 成员与派生类的私有(private)成员具有相同的访问控制。尽管可能,私有(private)继承是一个非常特定的工具,很少使用。在大多数情况下,您需要公共(public)继承:
class SmallBox: public Box {
protected:
double height;
};
class TooSmall: public SmallBox {
public:
void setSmallWidth( double wid );
void setHeight(double hei);
double getSmallWidth( void );
double getHeight(void);
};
这样, protected 成员将对所有后代(不仅是直系子代)正常可见。
如果出于某种原因,您想坚持私有(private)继承,则必须将私有(private)继承的 protected 成员“提升”为protected:
class SmallBox:Box {
protected:
double height;
using Box::width; // make it protected again
};
class TooSmall:SmallBox {
public:
void setSmallWidth( double wid );
void setHeight(double hei);
double getSmallWidth( void );
double getHeight(void);
};
关于c++ - 访问孙类中 protected 基类成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57233729/