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或是其他的,编译是通不过的。不知道为什么这样设计

  • 相关阅读:
    application.properties /application.yml官网查看配置;springboot application.properties 官网查看,info yml 查看;springboot.yml查看info;springboot.yml查看Actuator监控中心info
    Clion 教程书写Hello World,C语言开发;Clion 的C语言开发
    Host is not allowed to connect to this MySQL server---------------->windows10
    @RequestBody jackson解析复杂的传入值的一个坑;jackson解析迭代数组;jackson多重数组;jakson数组
    windows10 搭建Dubbo
    无DNS解析环境下部署Vcenter6.7
    常用联想网络连接
    Linux 不重启扫描存储磁盘
    WWN,WWNN,WWPN三者的区别
    HDFS、Ceph、GFS、GPFS、Swift 等分布式存储技术的特点和适用场景
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3076963.html
Copyright © 2011-2022 走看看