const成员变量

const成员变量和const普通变量用法相似。初始化const成员变量只有一种方法,就是通过构造函数的初始化列表。

const成员函数

const成员函数可以使用类中的所有成员变量,但是不能修改它们的值。

注意:const成员函数需要在声明和定义的时候在函数头部的结尾加上const关键字

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

class Student{
public:
    Student(string name, int age, float score);
    void show();
    //声明常成员函数
    string getname() const;
    int getage() const;
    float getscore() const;
private:
    string m_name;
    int m_age;
    float m_score;
};
Student::Student(string 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;
}
//定义常成员函数
string Student::getname() const{
    return m_name;
}
int Student::getage() const{
    return m_age;
}
float Student::getscore() const{
    return m_score;
}

const对象

常对象:只能调用类的const成员(包括const成员变量和const成员函数)

#include<iostream>
#include<string>
using namespace std;

class Student{
public:
    Student(string name, int age, float score);
public:
    void show();
    string getname() const;
    int getage() const;
    float getscore() const;
private:
    string m_name;
    int m_age;
    float m_score;
};
Student::Student(string 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;
}
string Student::getname() const{
    return m_name;
}
int Student::getage() const{
    return m_age;
}
float Student::getscore() const{
    return m_score;
}
int main(){
    const Student stu("小明", 15, 90.6);
    //stu.show();  //error
    cout<<stu.getname()<<"的年龄是"<<stu.getage()<<",成绩是"<<stu.getscore()<<endl;
    const Student *pstu = new Student("李磊", 16, 80.5);
    //pstu -> show();  //error
    cout<<pstu->getname()<<"的年龄是"<<pstu->getage()<<",成绩是"<<pstu->getscore()<<endl;
    return 0;
}

const成员函数想要改变成员变量的值怎么办?

方法1:在成员变量前加mutable

#include<iostream>
using namespace std;

class student{
	mutable int m_age;
public:
	void fun(int age) const;
};

void student::fun(int age) const{
	m_age = age;
	cout << m_age << endl;
}

int main(){
	student stu;
	stu.fun(10);
	return 0;
} 

方法2:创建一个const指针指向this指针所指的对象,然后用这个指针去操作想要修改的成员变量

#include<iostream>
using namespace std;

class student{
	mutable int m_age;
public:
	void fun(int age) const;
};

void student::fun(int age) const{
	student* p = const_cast<student*>(this); //this是const指针 
	p -> m_age = age;
	cout << m_age << endl;
}

int main(){
	student stu;
	stu.fun(10);
	return 0;
} 
posted on 2020-02-23 00:51  xiaobaizzZ  阅读(615)  评论(0编辑  收藏  举报