23.常函数和常函数

1.const修饰成员函数

●用const修饰的成员函数时,const修饰this指针指向的内存区域,成员函数体内不可以修改本类中的任何普通成员变量,

● 当成员变量类型符前用mutable修饰时例外。

//const修饰成员函数
class Person{
public:
	Person(){
		this->mAge = 0;
		this->mID = 0;
	}
	//在函数括号后面加上const,修饰成员变量不可修改,除了mutable变量
	void sonmeOperate() const{
		//this->mAge = 200; //mAge不可修改
		this->mID = 10; //const Person* const tihs;
	}
	void ShowPerson(){
		cout << "ID:" << mID << " mAge:" << mAge << endl;
	}
private:
	int mAge;
	mutable int mID;
};

int main(){

	Person person;
	person.sonmeOperate();
	person.ShowPerson();

	system("pause");
	return EXIT_SUCCESS;
}

2.const修饰对象(常对象)

●常对象只能调用const的成员函数

● 常对象可访问 const 或非 const 数据成员,不能修改,除非成员用mutable修饰

程序1:

class Person
{
public:
    Person()
    {
		this->mAge = 0;
		this->mID = 0;
    }
    void ChangePerson() const
    {
		mAge = 100;
		mID = 100;
    }
    void ShowPerson()
    {
		cout << "ID:" << this->mID << " Age:" << this->mAge << endl;
    }

public:
    int mAge;
    mutable int mID;
};

void test()
{	
	const Person person;
	//1. 可访问数据成员
	cout << "Age:" << person.mAge << endl;
	//person.mAge = 300; //不可修改
	person.mID = 1001; //但是可以修改mutable修饰的成员变量
	//2. 只能访问const修饰的函数
	//person.ShowPerson();
	person.ChangePerson();
}

程序2:

#pragma warning(disable:4996)
//2022年9月22日21:46:00
#include <iostream>
using namespace std;

class Maker
{
public:
    int id;
    int mAge;
    mutable int score;//mutable修饰的成员变量

public:
    Maker(int id, int age)
    {
        this->id = id;
        this->mAge = age;
        score = 100;
    }
    //常函数
    void printMaker() const//1.函数后面加上const,该函数就是常函数
    {
        //id = 100;//err 2.常函数内不能修改普通成员变量
        //3.const修饰的是this指针指向的空间中的变量,不能修改
        //Maker *const this;
        //变成
        //const Maker *const this;//这是常函数修饰的
        score = 200; //4.mutable修饰的变量在常函数中可以修改
        cout << "score = " << score << endl;
    }
};
void test01()
{
    Maker m(1, 18);
    m.printMaker();
}

int main()
{
    test01();
    system("pause");
    return EXIT_SUCCESS;
}

输出结果:

score = 200
请按任意键继续. . .


程序3:

#pragma warning(disable:4996)
//2022年9月22日22:28:03
#include <iostream>
using namespace std;

class Maker
{
public:
    int id;
    int mAge;
    mutable int score;//mutable修饰的成员变量

public:
    Maker(int id, int age)
    {
        this->id = id;
        this->mAge = age;
        score = 100;
    }
    //常函数
    void printMaker() const//1.函数后面加上const,该函数就是常函数
    {
        //id = 100;//err 2.常函数内不能修改普通成员变量
        //3.const修饰的是this指针指向的空间中的变量,不能修改
        //Maker *const this;
        //变成
        //const Maker *const this;//这是常函数修饰的
        score = 200; //4.mutable修饰的变量在常函数中可以修改
        cout << "score = " << score << endl;
    }
};
void test01()
{
    Maker m(1, 18);
    m.printMaker();
}

void test()
{
    //1.在数据类型前面加上const,让对象成为常对象
    const Maker m(1, 18);

    //m.id = 100;常对象不能改变普通成员变量的值
    //m.func();//常对象不能调用普通成员函数
    m.printMaker();//常对象可以调用常函数
    m.score = 500;//常对象可以修改mutable修饰的成员变量

    Maker m2(2, 20);
    m2.printMaker();//普通对象可以调用常函数
}

int main()
{
    test();
    system("pause");
    return EXIT_SUCCESS;
}

输出结果:

score = 200
score = 200
请按任意键继续. . .

参考资料

参考资料来源于黑马程序员等

posted @ 2022-09-26 19:01  CodeMagicianT  阅读(101)  评论(0编辑  收藏  举报