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

C++外围类能否访问嵌套类成员?如何调用嵌套类printnumber函数

外围类与嵌套类的访问规则说明

1. 外围类能否访问嵌套类的成员函数

  • 嵌套类是定义在外围类作用域内的独立类型,不属于外围类的实例成员,外围类的实例不会默认携带嵌套类的实例对象。
  • 外围类对嵌套类的成员没有特殊访问权限,需要遵循普通类的访问规则:
    • 若要调用嵌套类的非静态成员函数,必须先创建嵌套类的实例,才能访问其公有成员
    • 若要调用嵌套类的静态成员函数,可以直接通过外围类名::嵌套类名::静态函数名的方式访问,无需创建实例
  • 补充:C++11及之后标准规定嵌套类默认是外围类的友元,因此你代码中嵌套类的printnumber访问外围类私有成员x的写法是合法的。

2. 正确调用printnumber的实现方式

printnumber是enclose::nested1类的非静态公有成员函数,调用需要先创建嵌套类的实例,再传入enclose类实例作为参数,修正后的main函数如下:

int main()
{
    enclose example;
    // 第一步:创建嵌套类nested1的实例
    enclose::nested1 nested_instance;
    // 第二步:用嵌套类实例调用成员函数,传入enclose实例作为参数
    nested_instance.printnumber(example);
    return 0;
}

如果你希望直接通过enclose实例调用printnumber,可以在外围类中封装一层调用接口,修改enclose类的定义即可:

class enclose
{
    private:
        int x;
    public:
        enclose(void) { x = 10; };
        ~enclose(void) { };

        class nested1
        {
            public:
                void printnumber(enclose p);
        };
        // 新增公有封装接口
        void printnumber() {
            nested1 ins;
            ins.printnumber(*this);
        }
};

修改后你原本写的example.printnumber();就可以正常运行,输出结果为the number is 10。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:48:04