C++ static、const对象声明与定义 –续集–疑问?

昨天那个朋友告诉我处理const static的办法,程序却也跑起来了。但是昨晚睡觉的时候突然觉得不对头。看下面的代码:

int TestClass::m_nvar;

const int TestClass::m_cnsta_var = 0;

const int TestClass::m_con_var = 0;

这样的定义,不明显破坏了类的封装了么?而且main函数中TestClass::m_nvar++;这样的操作很明显就是可以破坏类封装的。看看类的定义:

class TestClass

{

public:

    TestClass();

    TestClass(int n);

    virtual ~TestClass(void);

    int m_ntestVar;

    static int m_nvar;

    const static int m_cnsta_var;

    static const int m_con_var ;

private:

public:

    int display(void);

};

看到static int m_nvar;他是static变量,可以在main还是操作?是的啊?他不是pubilc的么?这就更是完全有点恶搞了。是的,此处是public,要是我写成private呢。会如何?

class TestClass

{

public:

    TestClass();

    TestClass(int n);

    virtual ~TestClass(void);

private:

    int m_ntestVar;

    static int m_nvar;

    const static int m_cnsta_var;

    static const int m_con_var ;

public:

    int display(void);

};

错误信息:

1>Compiling...

1>demo_static.cpp

1>d:/documents/demo_static/demo_static.cpp(26) : error C2248: 'TestClass::m_nvar' : cannot access private member declared in class 'TestClass'

1>        d:/documents/demo_static/testclass.h(19) : see declaration of 'TestClass::m_nvar'

1>        d:/documents/demo_static/testclass.h(12) : see declaration of 'TestClass'

 

那么我改改main函数的内容:

再次编译,成功执行。

但是

int TestClass::m_nvar;

const int TestClass::m_cnsta_var = 0;

const int TestClass::m_con_var = 0;放到main函数所在的文件中,怕不是最好的,置于类实现中定然是可选的。尝试:

再次编译,一样成功。这样是类体定义的:

private:
    static int m_nvar;
    const static int m_cnsta_var;
    static const int m_con_var ;

static int m_nvar;不可在类体外访问(在main中操作失败了),保证的封装,而将

const static int m_cnsta_var;
    static const int m_con_var ;

放到main所在文件和类实现文件中,效果一样?但是保证了类的封装性,至少在我们对数据的透明上可以遮盖掉对数据内容的认知。

 

原文链接: https://www.cnblogs.com/Podevor/archive/2011/06/29/2788089.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++ static、const对象声明与定义 --续集--疑问?

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/27847

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午5:25
下一篇 2023年2月8日 上午5:26

相关推荐