You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++继承类One、Two定义咨询:双访问场景实现与代码正误验证

问题解答

一、你提供的case2代码正误判断

你写的这段代码不满足第二个条件,错误原因如下:

  • 基类Two的f、x声明为public权限,不仅One的成员可以访问,Two的对象、外部代码都可以直接访问这两个成员,不符合「只有类One的成员可访问所有数据成员」的限制
  • 派生类One的a、b是private权限,Two的成员完全无法访问这两个成员,不满足访问两类所有成员的要求。

二、满足第二个条件的正确实现

要求只有One的成员可以访问两个类的所有数据成员,核心要做到:

  1. 基类Two的成员设为private,同时声明One为Two的友元,保证只有One的成员可以访问Two的私有成员
  2. One私有继承Two,同时将自身的a、b设为private,避免外部、类对象访问这些成员
    正确代码如下:
#include <iostream>
using namespace std;

class Two{
    // 声明One为友元,仅One成员可访问Two的私有成员
    friend class One;
private:
    float f;
    int x;
};

// 私有继承Two,Two的成员在One中变为私有,外部无法访问
class One: private Two{
private:
    int a;
    char b;
    // 此处One的成员函数可以自由访问f、x、a、b四类成员
};

此时只有One的成员函数可以访问两个类的所有4个数据成员,Two的成员、两个类的对象、外部代码都无法访问全部成员,符合要求。

三、满足第一个条件的实现方案

要求两个类的对象都可访问两个类的所有数据成员,核心要做到所有数据成员都是public权限,One公有继承Two即可:

#include <iostream>
using namespace std;

class Two{
public:
    float f;
    int x;
};

// 公有继承Two,Two的public成员在One中仍为public
class One: public Two{
public:
    int a;
    char b;
};

// 测试示例
int main(){
    Two t;
    t.f = 1.5f;
    t.x = 10; // Two的对象可访问自身所有成员
    One o;
    o.f = 2.5f;
    o.x = 20;
    o.a = 30;
    o.b = 'c'; // One的对象可访问两类共4个成员
    return 0;
}

此时Two的对象可以访问自身的f、x,One的对象可以访问自身的a、b以及继承来的f、x,满足第一个条件的要求。

内容的提问来源于stack exchange,提问作者Shreyas R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:54:05