c++ - 如何从友元类访问抽象类的私有(private)成员?

标签 c++ abstract-class friend-class

class A  
{  
private:  
        int a,b,c;  
public:
        virtual int get()=0;
         friend class B;
};

class B{
//here I want to access private variables of class A that is a, b and c
};

class C:public class A
{  
        int get(){    
       //some code  
        }  
};

如何在 B 类中访问 A 类的私有(private)成员。我无法创建 A 类的对象,因为它是抽象的。我必须以某种方式使用 C 类的对象来执行此操作,但是该怎么做呢?

最佳答案

class A {
    friend class B;
private:
    int x;
public:
    A() : x(42) {}
};

class C : public A {
};

class B {
public:
    int reveal_secrets(C &instance){
        // access private member
        return instance.x;
    }

    int reveal_secrets(){
        // access private member of instance created inside B
        C instance;
        return instance.x;
    }
};

void print_secrets(){
    C instance;
    B accessor;
    std::cout << accessor.reveal_secrets(instance) << ", " << accessor.reveal_secrets() << std::endl;
}

关于c++ - 如何从友元类访问抽象类的私有(private)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24555726/

相关文章:

c++ - 将位图位从 GetDIBits 转换为 jpeg 以进行 winsock 传输

java - 静态 block 用法中的抽象类

c++ - 注入(inject)的类名可以用作友元声明中的类型名吗?

C++ 详细命名空间、匿名方法、私有(private)方法、类方法、pimpl 方法、友元类方法

c++ - 在 C++ 中使用友元函数

c++ - 如何设计这个易于修改的程序?

c++ - 将 2 个字符分配给一个 int

c# - 我可以使用反向地理编码服务器端吗?使用 C# 还是 C++?

C++11 vector 的智能指针

java - 在不使用 protected 的情况下处理抽象类的正确方法是什么?