zoukankan      html  css  js  c++  java
  • 关于C++中类的static和const成员

    1. static成员变量

    类的static成员变量,当在头文件中声明后,应该再在类的源文件中定义一下:

    如在Test.h中有如下代码:

    #pragma once
    class Test
    {
    private:
    	static int data;
    };
    

    应该在Test.cpp中定义其成员变量data:

    #include "Test.h"
    
    int Test::data = 10;
    


    注意定义data的代码不应该写在类的构造函数中,因为构造函数会被执行多次,同理也不应放在类的头文件中,因为头文件可能会被包含多次


    2.static成员函数

    类的static成员函数,是可以通过类名直接来调用的,这在很多情况下是比较方便的。但是类的static成员函数只能访问类的static成员变量和static成员函数,因为其没有this指针


    3.const成员变量

    类的const成员变量,只能在构造函数的成员初始化列表中进行初始化,而且在之后不能被修改。可以把类的一些只读变量设定为const

    Test.h文件:

    #pragma once
    class Test
    {
    private:
    	const int data;
    };

    Test.cpp文件:

    #include "Test.h"
    
    Test::Test(void) :
    data(10)
    {
    }


    4.const成员函数

    类的const成员函数,具有const this的指针,因此也就不能更改类中的成员变量。不过这个有个特例,就是当成员变量声明为mutable时,它是可以被类的const成员函数更改的。

    如果类的成员函数不对类的数据进行更改,则应该把此函数定义为const成员函数,首先它使类的接口更容易被理解,告诉调用者,这个函数不会对类的数据进行更改,其次,它可以扩大此函数的有效使用范围:

    例如在Test类中有一个打印类的基本信息的函数,此函数对类的数据是只读的,如果没有把它设定为const,则const Test的实例就不能调用此函数,这在逻辑上不太合理。所以应该把它设定为const的成员函数,这样的话,Test的实例和const Test的实例都可以调用此函数了


    5.static const成员变量

    static const成员变量,在类的头文件中声明后,也类似于static成员变量,应该在类的源文件中再定义一下:

    Test.h文件:

    #pragma once
    class Test
    {
    private:
    	static const int data;
    };
    

    应该在Test.cpp中定义其成员变量data:

    #include "Test.h"
    
    const int Test::data = 10;

    不过,对于int型的static const成员变量,可以在声明时直接定义它,如下:

    #pragma once
    class Test
    {
    private:
    	static const int data = 10;
    };

    这样在Test.cpp中就不必再定义data了。但这仅仅是对int型才行得通。如果在上面把int换成float或是其他的,编译是通不过的。不知道为什么这样设计

  • 相关阅读:
    VS2005中“ASP.NET Web 应用程序”比“ASP.NET 网站”好处多啊
    让你的ASP.NET虚拟主机也支持子网站
    单线程程序避免界面假死
    用什么版本的Oracle
    Windows Forms DataGridView 中合并单元格
    关于asp.net 2.0 的虚拟主机
    RedHat enterprise6.3 samba服务安装和配置
    苹果面试8大难题及答案
    新版编译器编译内核 version `GLIBCXX_3.4.9' not found
    Source insight 支持汇编
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3076963.html
Copyright © 2011-2022 走看看