假设我有两个类(class), 一个是:
class A{
public:
void f1()
{
cout << "function 1";
}
void f2()
{
cout << "function 2";
}
void f3()
{
cout << "function 3";
}
};
现在我希望 B
类包含 A
的所有功能,f3
除外。
我正在做的是:
class B: public A
{
private:
void f3()
{
}
};
据我所知,B::f3()
隐藏了A::f3()
的定义,而B::f3( )
是私有(private)的,f3()
不能通过类 B
访问。但我仍然可以这样调用它:
B var();
var.A::f3();
有什么方法可以在不更改类 A
的情况下使用继承从类 B
中完全隐藏 f3
吗?
最佳答案
不要养成通过继承将类拼凑在一起的习惯,方法是混合和匹配大致执行您想要的操作的类。这会导致糟糕的代码。
但是,偶尔通过一个类实现另一个类确实有意义。在这些情况下,如果您正在使用继承,那么“正确”的方法是使用private 继承。
我所说的“正确”是指最可接受的方式。
class A
{
public:
void f1()
{
cout << "function 1";
}
void f2()
{
cout << "function 2";
}
void f3()
{
cout << "function 3";
}
};
class B: private A
{
public:
using A::A; // use A's constructors
using A::f1;
using A::f2;
// do not use f3
};
这可能有意义的时候是由于涉及的方法数量太多,组合太乏味了。
关于c++ - 创建一个包含其父类的所有功能的类,除了一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40029330/