class Parent { int x; public: int a; int b; }; class Son: public Parent { public: int f () const { int c = a+b; return x; } };
时间: 2024-03-27 17:41:33 浏览: 23
这段代码存在一个问题:
在类Son中,成员函数f()试图访问基类Parent中的私有成员变量x,但是在派生类中是无法直接访问基类的私有成员的。
要修正这个问题,可以将基类Parent中的x成员变量改为protected访问权限,或者在基类中提供一个公有成员函数来获取x的值。例如:
```c++
class Parent {
protected:
int x;
public:
int a;
int b;
int getX() const { return x; }
};
class Son : public Parent {
public:
int f() const {
int c = a + b;
return x; // 可以通过protected访问权限或者公有成员函数getX()来访问基类中的x成员变量
}
};
```
这样,在派生类Son中就可以通过protected访问权限或者getX()公有成员函数来获取基类Parent中的x成员变量的值,而不需要直接访问基类中的私有成员变量。
相关问题
class BC{ int x; public: //...}; class DC: public BC {public: int f() const {return x;} };
这段代码中,BC是一个基类,DC是一个派生类。BC中有一个私有成员x,DC中有一个公有的成员函数f(),该函数返回x的值。但是由于x是BC的私有成员,DC无法直接访问x。这里需要使用继承来解决这个问题。DC通过public继承BC,将BC中的成员变量和成员函数都继承到DC中,然后就可以在DC中使用x了。所以DC中的f()函数可以访问x,并返回x的值。
class Foo3 {const int x;};合法吗
不合法。在定义一个类的时候,如果该类有一个 const 成员变量,则必须对其进行初始化,否则会导致编译错误。在该类中,const int x 没有被初始化,因此会编译错误。可以通过以下方式对其进行初始化:
```c++
class Foo3 {
public:
Foo3(int num):x(num){}
private:
const int x;
};
```
或者使用成员初始化列表:
```c++
class Foo3 {
public:
Foo3(int num):x(num){}
private:
const int x;
};
```