Один из подходов, когда, например, если вы хотите использовать часть класса для реализации нового класса и хотите использовать наследование, но не хотите раскрывать весь API базового класса, это использовать частное наследование,а затем выберите то, что вы хотите переслать.
Вот пример:
#include <stdio.h>
class ParentClass
{
public:
virtual void write() { printf("write"); }
virtual void read() { printf("read"); }
virtual void calculate() { printf("calculate"); }
virtual void other() { printf("other"); }
};
class ChildClass : private ParentClass
{
public:
void calculate() override { printf("new calculate"); }
using ParentClass::other;
};
int main() {
ChildClass c;
c.calculate();
c.other();
}
В проводнике компилятора Godbolt я получаю эту сгенерированную сборку (как и ожидалось)
.LC0:
.string "new calculate"
.LC1:
.string "other"
main:
sub rsp, 8
mov edi, OFFSET FLAT:.LC0
xor eax, eax
call printf
mov edi, OFFSET FLAT:.LC1
xor eax, eax
call printf
xor eax, eax
add rsp, 8
ret
Синтаксис using ParentClass::other
(для пересылки функции из базового класса без изменений) только C ++ 11, вы не пометили функцию c ++ 11, поэтому я не знаю, можете ли вы использовать это :), но это удобно