首页 > 编程语言 >C++中的const成员变量和成员函数

C++中的const成员变量和成员函数

时间:2023-11-10 16:07:10浏览次数:38  
标签:const 函数 成员 C++ char score 变量

在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。

C++中的const成员变量和成员函数_成员变量

const成员变量

const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表,这点在前面已经讲到了,请猛击《C++初始化列表》回顾。

const成员函数(常成员函数)

const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。

C++中的const成员变量和成员函数_成员函数_02

我们通常将 get 函数设置为常成员函数。读取成员变量的函数的名字通常以get开头,后跟成员变量的名字,所以通常将它们称为 get 函数。

C++中的const成员变量和成员函数_常成员函数_03

常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字,请看下面的例子:

class Student{
    public:
        Student(char *name, int age, float score);
        void show();
        //声明常成员函数
        char *getname() const;
        int getage() const;
        float getscore() const;
    private:
        char *m_name;
        int m_age;
        float m_score;
    };
    Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){ }
    void Student::show(){
        cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
    }
    //定义常成员函数
    char * Student::getname() const{
        return m_name;
    }
    int Student::getage() const{
        return m_age;
    }
    float Student::getscore() const{
        return m_score;
    }

getname()、getage()、getscore() 三个函数的功能都很简单,仅仅是为了获取成员变量的值,没有任何修改成员变量的企图,所以我们加了 const 限制,这是一种保险的做法,同时也使得语义更加明显。

需要强调的是,必须在成员函数的声明和定义处同时加上 const 关键字。char *getname() constchar *getname()是两个不同的函数原型,如果只在一个地方加 const 会导致声明和定义处的函数原型冲突。

最后再来区分一下 const 的位置:

  • 函数开头的 const 用来修饰函数的返回值,表示返回值是 const 类型,也就是不能被修改,例如const char * getname()
  • 函数头部的结尾加上 const 表示常成员函数,这种函数只能读取成员变量的值,而不能修改成员变量的值,例如char * getname() const

标签:const,函数,成员,C++,char,score,变量
From: https://blog.51cto.com/u_15641375/8303678

相关文章

  • C++实现一键关闭桌面
    方法一:C++关闭桌面,explorer.exe#include<Windows.h>#include<TlHelp32.h>#include"resource.h"#pragmawarning(disable:4996)voidtaskkill(constchar*name){ HANDLEinfo_handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//拍摄系统中所有进......
  • C\C++的转义字符
    所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。转义字符意义ASCII码值(十进制)\a响铃(BEL)007\b退格(BS)008......
  • C/C++字符的使用
    在C/C++中有字符和字符数组,分别对应char和char[]。其中字符数组也称字符串。查阅头文件stdint.h可以看到如下两句关键的语句:typedefsignedcharint8_t;typedefunsignedcharuint8_t;那么char对应的是哪一个?网上找不到确切说法,据说这个和编译器有关。经过实验表明......
  • 静态代码分析工具Helix QAC 2023.3:将100%覆盖MISRA C++2023规则
    静态代码分析工具HelixQAC2023.3:将100%覆盖MISRAC++:2023®规则 HelixQAC2023.3预计将于2023年第四季度发布的新MISRAC++®指南,将100%覆盖MISRAC++:2023®规则。 此外,此版本扩展了对C++20语言支持,并改进了PerforceValidate平台和HelixQAC与Validate的集成,包括其他......
  • 设置成员操作符--inside
     设置成员操作符–insideSystemVerilog增加了一个检测是否集合中–员的操作符,这个操作符的关键字是inside。logic[2:0]a;if(ainside{3'b001,3'b010,3'b100})//等价if((a==3'b001)||(a==3'b010)||(a==3'b100))...使用inside操作符可以方便的比较一个数值和多个可能值......
  • C++函数分文件编写
    1、创建.h后缀名的头文件并且声明需要调用的函数,并且给出通用输出流和输出流#include<iostream>usingnamespacestd;voidasd();2、创建.cpp后缀名的源文件并且调用刚刚定义的头文件#include"asd.h"voidasd(){ cout<<"HelloWorld!"<<endl;}3、在源文件中......
  • 内部类:成员内部类、静态内部类、局部内部类、匿名内部类
     成员内部类  ......
  • C++中获取数组长度
    #include<iostream>usingnamespacestd;template<classT>intlength(T&arr){//cout<<sizeof(arr[0])<<endl;//cout<<sizeof(arr)<<endl;returnsizeof(arr)/sizeof(arr[0]);}intmain(){i......
  • C++11 并发编程基础(一):并发、并行与C++多线程
    C++11标准在标准库中为多线程提供了组件,这意味着使用C++编写与平台无关的多线程程序成为可能,而C++程序的可移植性也得到了有力的保证。另外,并发编程可提高应用的性能,这对对性能锱铢必较的C++程序员来说是值得关注的。1.何为并发并发指的是两个或多个独立的活动在同一时段内发生......
  • C++ ubuntu install libpq-fe.h PGconn PQconnectdb PGresult PQexec PQnfields P
    1.Installlibpq-devsudoaptinstalllibpq-devlocatelibpq-fe.h/usr/include/postgresql/libpq-fe.h 2.main.cpp#include<chrono>#include<fstream>#include<iomanip>#include<iostream>#include<sstream>#include<......