gpt4 book ai didi

c++ - 派生类变量作用域c++

转载 作者:太空宇宙 更新时间:2023-11-03 10:29:57 26 4
gpt4 key购买 nike

假设我们有两个类,BaseDerived。有两种方法,getXsetX,它们是公共(public)的并使用 protected int x 与用户交互。 Base 构造将 x 设置为 1,Derived 构造将 x 设置为 3。

class Base {
public:
Base();
int getX();
void setX(int n);
protected:
int x;
}

int Base::getX() {
return x;
}

void Base::setX(int n) {
x = n;
}

Base::Base() : x(1) {
}

class Derived : public Base {
public:
Derived();
}

Derived::Derived() : x(3) {
}

Derived 类可以完全访问 Base 的方法。太好了。

假设出于某种原因我不希望 setXDerived 类的用户可用。我想到了几种方法。

1) 在 Derived 中将 setX 重新声明为私有(private),因此隐藏会阻止用户完全访问该方法。

2) 在Derived 中将x 重新声明为private const int。但是,这会导致 setX 和 getX 使用 Base::x。

3) 使 Base::setX 成为虚函数,使 Derived::setX 函数什么都不做。

处理此问题的最佳方法是什么?

最佳答案

作为 Derived 公开派生自 Base,您尝试做的事情没有多大意义。您应该改为使用 privateprotected 继承,然后在 Derived 中仅提供对您需要的 Base 方法的访问,而不是周围的方式。

关于c++ - 派生类变量作用域c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19822537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com