c++派生基类Friend函数访问Parent上的private?

标签 c++ inheritance visual-c++ friend

请考虑以下场景:

    class A 
    { 
     friend void B::Itemfunction();
     private:
     int number;
     int size;
     public:
     Randomfunction();
    }

    class B : public A
    {
     private:
     string Random;
     public:
     void Itemfunction();
     void CheckLog();

    }

在 A 类型的 Itemfunction 中创建的对象是否可以访问 obj 的私有(private)数据成员?如:

    void B::Itemfunction(){
    A obj;
    //Possible to do...
    obj.number = 2;
    }

我知道派生类 B 可以访问 A 的所有公共(public)部分,但是如果我只想要一个函数(Itemfunction)来访问私有(private)部分,这是正确的做法吗?我只是想看看我的理解是否正确。

干杯

最佳答案

不,这不可能。您不能为尚未完全声明的类添加类成员函数。

在那种情况下(因为 class B 需要一个完整声明的 class A 才能继承),唯一的方法是转发声明 class B; 和全类同学交 friend :

#include <iostream>
#include <string>

    class B;

    class A 
    { 
     // friend void B::Itemfunction();
     friend class B;
     private:
     int number;
     int size;
     public:
     void Randomfunction();
    };

    class B : public A
    {
     private:
     std::string Random;
     public:
     void Itemfunction();
     void CheckLog();

    };

int main()
{   
}

Live Demo

关于c++派生基类Friend函数访问Parent上的private?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36872187/

相关文章:

C++ MFC 应用程序在 Windows 7 上运行缓慢,但在 XP 上运行迅速

c++ - 如何使用绑定(bind)的连接和监听套接字测试 winsock 应用程序?

c++ - std::thread 未处理异常访问 this*

oop - Racket 子类中绑定(bind)的自动继承

java - 接口(interface)真的可以用来实现多重继承吗

c++ - 将 exr/pfm 保存到位图 CImg

c++ - 递归(十进制到十六进制)C++

c++ - 删除空格后如何将空格插入字符串

'DTYPE' 中的 java、MySQL 和未知列 'field list'

C++如何上下捕捉鼠标滚轮?