class S{ int v; public: S() { }; S(int n):v(n) { } int getV(){return v;} }; class D:public S{ private: int v; public: D(int n):S(n){v=2*n;} int getV(){return v;} }; int main() { D a(2); cout << a.getV()<<','<<a.S::getV()<<endl; return 0; }
时间: 2024-03-03 22:49:37 浏览: 146
这段代码的输出结果是:
```
4,2
```
下面是代码的详细解释:
1. 定义一个名为 S 的类,包含一个整型成员变量 v,一个默认构造函数和一个带参数的构造函数。
```cpp
class S {
int v;
public:
S() { };
S(int n) : v(n) { }
int getV() { return v; }
};
```
2. 定义一个名为 D 的类,公有继承自 S 类,包含一个私有整型成员变量 v 和一个带参数的构造函数。
```cpp
class D : public S {
private:
int v;
public:
D(int n) : S(n) { v = 2 * n; }
int getV() { return v; }
};
```
3. 在主函数中创建一个 D 类型的对象 a,其构造函数参数为 2。
```cpp
D a(2);
```
4. 调用对象 a 的 getV() 函数时,由于 D 类中定义了同名的成员变量 v,因此将访问到 D 类的成员变量 v,返回值为 4。
```cpp
cout << a.getV() << ',';
```
5. 调用对象 a 的 S::getV() 函数时,使用作用域解析运算符访问 S 类中的成员变量 v,返回值为 2。
```cpp
cout << a.S::getV() << endl;
```
因此,程序将输出以下内容:
```
4,2
```
需要注意的是,由于 D 类中定义了同名的成员变量 v,它将隐藏 S 类中的成员变量 v,因此在 D 类中访问 S 类的成员变量 v 时,必须使用作用域解析运算符。
阅读全文