问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

类定义中嵌套结构为什么不可以?

发布网友 发布时间:2022-05-11 06:25

我来回答

3个回答

热心网友 时间:2024-02-18 11:35

类定义中嵌套结构体是可以的,这里要分几种情况说明:

对于已经声明的(在类外)结构体类型,在类定义内嵌套结构体变量,没有任何问题。

在类定义内直接定义结构体类型并同时声明结构体变量,也是可以的,但这个结构体类型无法在类外使用。

在类内只定义结构体类型,而不同时声明结构体变量是不可以的(这个在结构体定义内同样如此)。

大多数情况下,我们建议将结构体类型的定义放在类的外面,这样定义的结构体可以在更多的地方(类外)使用,而不会发生使用逻辑歧义和编译错误。


其实类就是在C++中,对C语言结构体的扩展,在C++中可以将结构体看做是一个最简单的类。而“类嵌套”则是C++面向对象涉及的一个应用技巧,用于接口封装(隐藏)和成员共享,但这和嵌套结构体没有太大的关系,有兴趣可以专门看看相关的书籍。

另外,结构体的定义,有两种形式,其中一种带有typedef关键字,另一种不带。这两种定义是由差别的,简单的说,typedef是声明了一种“变量类型”,不带typedef是直接声明结构体变量,具体应用的差别参考结构体声明的相关书籍章节。

热心网友 时间:2024-02-18 11:36

类中可以嵌套结构,调用的时候前面要加类名。

热心网友 时间:2024-02-18 11:36

在一个类的内部定义另一个类或结构体,我们称之为嵌套类(nested class),或者嵌套类型。之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时可以对用户隐藏该底层实现。

虽然嵌套类在外围类内部定义,但它是一个独立的类,基本上与外围类不相关。它的成员不属于外围类,同样,外围类的成员也不属于该嵌套类。嵌套类的出现只是告诉外围类有一个这样的类型成员供外围类使用。并且,外围类对嵌套类成员的访问没有任何特权,嵌套类对外围类成员的访问也同样如此,它们都遵循普通类所具有的标号访问控制。

前面说过,之所以使用嵌套类的另一个原因是达到底层实现隐藏的目的。为了实现这种目的,我们需要在另一个头文件中定义该嵌套类,而只在外围类中前向声明这个嵌套类即可。当然,在外围类外面定义这个嵌套类时,应该使用外围类进行限定。使用时,只需要在外围类的实现文件中包含这个头文件即可。

另外,嵌套类可以直接引用外围类的静态成员、类型名和枚举成员,即使这些是private的。

实例如下:

#ifndef NESTCLASS_H_
#define NESTCLASS_H_
class A
{
public:
    A();
    ~A();
    void operate();
private:
    class B;
    B* m_b;
};
#endif

#include "nestclass.h"
#include <iostream>
using namespace std;
class A::B
{
public:
    B(){}
    ~B(){}
    void operate()
    {
        cout<<"B operate!"<<endl;
    }
};
A::A()
{
}
A::~A()
{
}
void A::operate()
{
    m_b = new B;
    cout<<"A operate!"<<endl;
    m_b->operate();
}
#include "nestclass.h"
void main()
{
    A a;
    a.operate();
}


在嵌套类的定义被看到之前我们只能声明嵌套类的指针和引用,如上面在A中定义为B m_b而不是B* m_b将会引发一个编译错误。关于C++嵌套类的详细用法请参考《C++ Primer 第三版》P551

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
这是真的黑米还是假的? 牡丹江市区好玩的地方 显卡问题,现在的显卡显存一般都为多少? 现在主流显存是多少?512M5年后会过时吗 主流家用电脑配置家用电脑买什么样配置比较好 现在的电脑显存一般是多少? 安顺万家领秀城怎么样?好不好?值不值得买? 请问下面一道题怎么加标点 花园里 牡丹 月季 玫瑰 芍药 开得美丽极了... 是什么把大地打扮的这么漂亮呢 是雪呀 这两句话怎么写标点符号? 通州有那些私立高中啊 基岩呈镶嵌结构是什么意思? 入耳式耳机为什么一个声音大一个声音小 led46ec330j3d如何使用投射,腾讯视频直接投射电视上面,如何开启或者有无这个功能 skyworth创维怎么投不了屏呢 3D 4K链接小米盒子的 用腾讯视频投不了 求高人指 支付成功以后,电子加油卡在哪里看到? 5月10号,我老公在微信的生活缴费里给他的中石油油卡充值1000元,为什么没有大礼包和优惠券呢? 微信充值加油卡移到出行页面怎么查看以往充值? 甘肃省考公务员报考多少人 往届甘肃省公务员考试是否比四川省竞争激烈? 2013也就是今年甘肃省公*我只考了110分,行测45.申论65.看来是彻底没戏了。好悲惨。更 甘肃的省考一般难度及题型跟哪个省份的相似? 有甘肃省考的上岸大神吗,能不能告知甘肃省考难度如何 惠而浦滚筒洗衣机洗涤异响的问题? 惠而浦全自动滚筒洗衣机在脱水排水时声音为什么那么大? 食醋泡黄豆这个方法,可以有效去雀斑吗 斑的问题 我吃醋泡 黑豆,很酸,手掌就会脱皮,几天不吃又好了,什么原因?醋跑黑豆有副作用吗? 醋豆的做法和作用? 醋泡黄豆,这黄豆如果是生的,要不要炒一下的,用来祛斑用的,应该怎么弄啊... dall笔记本用什么牌子的内存条 递归结构和嵌套结构本质一样吗? 我的入耳式耳机有些偏音,右边声音很小,左边很大,长时间对耳朵会有 嵌套结构体问题。 嵌套结构体数组 如何求嵌套结构体所占字节数 嵌套结构体的赋值问题 嵌套的结构体赋值的问题 网页嵌套结构 有关C语言嵌套结构体的赋值 数据结构顺序表使用嵌套结构的问题 嵌套的意思? 有关嵌套结构体赋值 ie6 iframe 问题。 如何设置文档背景图? 怎么样培养5岁儿童学电脑? 儿童入门编程教程哪里有?小孩子怎么学编程好? 带了美瞳眼睛有很多血丝,怎么回事、并没有什么不舒服的感觉???? 为什么带完美瞳眼睛就布满红血丝了 为什么戴美瞳会出现血丝?? 大盘大涨,个股不涨,怎么办?