覆盖作为另一个类的好友的虚拟受保护方法

Override virtual protected method that is a friend of another class

本文关键字:好友 虚拟 受保护 方法 另一个 覆盖      更新时间:2023-10-16

基本上,我想以某种方式模拟友谊继承,但限制它只能从某个方法内部发生。

所以从本质上讲,这就是我想要的

class A; // Forward declaration
class Base{
friend class A; // friend declaration so that A is able to see protected methods
protected:
virtual void method() {// some definition, might also be pure virtual}
}
class Derived : public Base{
A aObj;
void method(){//override the one in base and also gain access to aObj private members.}
public:
//public interface
} 

class A {
int var;
friend void Base::method(); 
public:
// public interface
}

有没有办法做到这一点?

这个怎么样

class Base {
friend class A; 
protected:
virtual void method() = 0;
std::tuple<int> GetAProperties(const A& a) {     
// You can change the tuple params
// as per your requirement.
return std::make_tuple(a.var);
}
}
class Derived : public Base {
A aObj;
void method() override {
auto objProperties = GetAProperties(aObj);
}
}

您可以在Base中获取指向 private 的A成员的指针,然后将这些成员指针传递给Derived

class A; // Forward declaration
class Base{
friend class A; // friend declaration so that A is able to see protected methods
private:
void method(A&);
virtual void do_method(A& a,int A::* var) {// some definition, might also be pure virtual
(a.*var)++;
}
};
class A{
int var;
friend void Base::method(A&);
};
class Derived : public Base{
A aObj;
virtual void do_method(A& a,int A::* var) {// some definition, might also be pure virtual
a.*var+=2;
}
public:
//public interface
};
void Base::method(A& a){
do_method(a,&A::var);
}

注意:不要在关键传球时使用它!!