c++类与对象类的嵌套

c++A类的私有嵌套一个B类,那在主函数中怎么创建这个B类的对象啊

在A类内嵌套一个B类,说明这个B类的作用域只在A类内,在main函数中是无法创建B类的对象的。在main函数中创建B的对象会报错“未定义的标识符”。如下:

img

如果想要在main函数中创建类B的对象,就把B改成public,方法如下:

#include <iostream>
using namespace std;

class A
{
public:
    void show() {
        cout << "A" << endl;
    }
public: //这里声明为public
    class B
    {
    private:
        int mNmb;
    public:
        void setNmb(int n) { mNmb = n; }
        int getNmb() { return mNmb; }
    };

    B m_b;
};


int main()
{
    A::B bb;
    bb.setNmb(2);
    return 0;
}

另一种方法就是使用友元函数,把main函数声明为A的友元函数。

#include <iostream>
using namespace std;

class A
{
public:
    friend int main();
    void show() {
        cout << "A" << endl;
    }
private: 
    class B
    {
    private:
        int mNmb;
    public:
        void setNmb(int n) { mNmb = n; }
        int getNmb() { return mNmb; }
    };

    B m_b;
};


int main()
{
    A::B bb;
    bb.setNmb(2);
    return 0;
}

将B类在A中的定义申明为public,就可以用A::B的域方式申明B对象了。例如:

class A
{
public:
    class B
    {
    public :
        B() {printf("Hello");}
    };

public:
    A() {}
};

int main()
{
    A::B b;
    system("pause");
}

这样就可以构造B对象并输出Hello了。
常见的例子如MFC的文件类中文件的打开方式,是在CFile类中定义的枚举类型,打开文件时需要写成 CFile::modeRead这种带上域的方式

B类既然已经被声明为A类的私有了,标明只能在A类中使用,外面是不能使用的(除非声明友元函数或类)。

当主函数被声明为A类的友元函数,则可以直接在主函数中使用B类,但是必须要这样使用A::B b;,标明B是A类下面的B类

#include <iostream>
using namespace std;

class A
{
    friend int main();
public:
    void func()
    {
        B b;
        b.print();
    }

private:
    class B {
    public:
        void print()
        {
            cout << __FUNCTION__ << endl;
        }
    };
};

int main(){    
    //
    A a;
    a.func();
    //
    A::B b;
    b.print();


    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632