b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

使用嵌套C类和枚举的利弊?

电脑杂谈  发布时间:2019-12-24 13:01:52  来源:网络整理

在嵌套类中调用外部类 de shuju_结构体类型的定义允许嵌套是指_c 嵌套类

使用嵌套的公共C类和泛型的优缺点是哪个?例如,假设您有一个名为printer的类,此类还储存有关输出托盘的信息,您可以:

class printer
{
public:
    std::string name_;
    enum TYPE
    {
        TYPE_LOCAL,
        TYPE_NETWORK,
    };
    class output_tray
    {
        ...
    };
    ...
};
printer prn;
printer::TYPE type;
printer::output_tray tray;

或者:

class printer
{
public:
    std::string name_;
    ...
};
enum PRINTER_TYPE
{
    PRINTER_TYPE_LOCAL,
    PRINTER_TYPE_NETWORK,
};
class output_tray
{
    ...
};
printer prn;
PRINTER_TYPE type;
output_tray tray;

我可以看见嵌套私人枚举/课程的好处,但是当提到公共场所/办公室时,办公室就分开了 – 它仍然很像是一种风格选择.

那么,你更喜欢哪个?为什么?

结构体类型的定义允许嵌套是指_c 嵌套类_在嵌套类中调用外部类 de shuju

最佳答案

嵌套类

嵌套在类中的类有几个副作用我常常觉得是弊病(如果不是纯粹的反模式).

让我们想象以下的代码:

class A
{
   public :
      class B { /* etc. */ } ;
   // etc.
} ;

甚至:

c 嵌套类_在嵌套类中调用外部类 de shuju_结构体类型的定义允许嵌套是指

class A
{
   public :
      class B ;
   // etc.
} ;
class A::B
{
   public :
   // etc.
} ;

所以:

> Privilegied Access:A :: B具有对A的所有成员(方法,变量,符号等)的特权访问,这削弱了封装

> A的范围是符号查找的候选者:来自B内部的代码将发现来自A的所有符号成为符号查找的或许候选者,这可能会混淆代码

> forward-declaration:如果没有给出完整的A声明,就能够转发A :: B.

>可扩展性:除非您是A的所有者,否则难以添加另一个A :: C类

c 嵌套类_在嵌套类中调用外部类 de shuju_结构体类型的定义允许嵌套是指

>代码详细程度:将类放在类只会使标题更大.你一直可以将它分成多个声明,但是没有办法使用类似命名空间的别名c 嵌套类,导入或使用.

作为一个结论,除非例外(例如嵌套类是嵌套类的一个私密部分……即便如此……),我觉得普通代码中的嵌套类没有任何含义,因为缺憾超出了大小的优势.

此外,它有点笨拙地尝试模拟命名空间而不使用C命名空间.

在pro方面,你隔离了这个代码,如果是私有的c 嵌套类,那么它就能够使用,但是来自“外部”类……

嵌套枚举

优点:一切.

在嵌套类中调用外部类 de shuju_c 嵌套类_结构体类型的定义允许嵌套是指

骗局:没什么.

事实是枚举项将污染全球范围:

// collision
enum Value { empty = 7, undefined, defined } ;
enum Glass { empty = 42, half, full } ;
// empty is from Value or Glass?

通过将每个枚举放在不同的命名空间/类中,可以避免这种冲突:

namespace Value { enum type { empty = 7, undefined, defined } ; }
namespace Glass { enum type { empty = 42, half, full } ; }
// Value::type e = Value::empty ;
// Glass::type f = Glass::empty ;

注意C 0x定义了类枚举:

enum class Value { empty, undefined, defined } ;
enum class Glass { empty, half, full } ;
// Value e = Value::empty ;
// Glass f = Glass::empty ;

正是出于这些问题.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-134486-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...