要从派生类到基类ptr访问受保护的基类函数,可以使用以下方法:
在基类中声明一个友元函数,该函数可以访问基类的受保护成员。然后,在派生类中实现该友元函数,并使用基类的指针访问受保护成员。
class Base {
protected:
int protected_member;
friend void accessProtectedMember(Base* ptr);
};
class Derived : public Base {
public:
void accessProtectedMember() {
accessProtectedMember(this);
}
};
void accessProtectedMember(Base* ptr) {
ptr->protected_member = 42;
}
在基类中声明一个虚函数,该函数可以访问基类的受保护成员。然后,在派生类中重写该虚函数,并使用基类的指针访问受保护成员。
class Base {
protected:
int protected_member;
virtual void accessProtectedMember() {
protected_member = 42;
}
};
class Derived : public Base {
public:
void accessProtectedMember() override {
Base::accessProtectedMember();
}
};
在基类中声明一个访问函数,该函数可以访问基类的受保护成员。然后,在派生类中继承该访问函数,并使用基类的指针访问受保护成员。
class Base {
protected:
int protected_member;
void accessProtectedMember() {
protected_member = 42;
}
};
class Derived : public Base {
public:
using Base::accessProtectedMember;
};
在这些方法中,使用访问函数和虚函数可能更符合面向对象的设计原则,因为它们允许更好的封装和灵活性。
领取专属 10元无门槛券
手把手带您无忧上云