C++中如何在类内部指向私有继承的类对象
如何获取私有继承基类的对象指针
嘿,刚好碰到过类似的场景,我来给你捋清楚怎么弄!
首先,你用private继承了std::string,虽然基类的对外接口在派生类里变成了私有访问权限,但派生类自己的成员函数是完全有权限访问基类的,包括获取基类对象的指针。
在你的func1里,只需要通过static_cast把this指针转换成std::string*类型就可以了,代码示例如下:
#include <iostream> #include <string> class A: private std::string { public: A(){} ~A(){} void func1() { // 获取指向std::string对象的指针 std::string* str_ptr = static_cast<std::string*>(this); // 现在可以用这个指针调用std::string的成员函数了 str_ptr->append(" Hello from private base class!"); std::cout << *str_ptr << std::endl; } }; // 测试调用 int main() { A a; a.func1(); return 0; }
为什么这能行?
私有继承的核心是对外隐藏基类的接口,但派生类内部的成员函数仍然可以访问基类的所有非私有成员(这里std::string的public成员都能通过指针调用)。static_cast在这里是安全的,因为A确实是从std::string私有继承来的,类型转换完全合法。
另外,如果你只是需要访问基类的成员,也可以直接用this调用(比如this->append("xxx")),不过如果确实需要指针的话,上面的方法就完全没问题。
内容的提问来源于stack exchange,提问作者vectorjon
相关产品推荐
相关产品推荐

