const成员函数

congst 成员函数只能调用const方法

const方法不能修改任何数据成员
如果一个对象的成员函数,不修改任何数据成员,那么就强烈建议把这个成员函数定义为const成员函数。

const不能修改任何数据


```cpp
#include <iostream>
#include <Windows.h>
#include <string>
#include <string.h>

using namespace std;
int HumanCount   ;
// 定义一个“人类”
#include <iostream>


class Human {
public:
	Human();
	Human(int age, int salary,string bldType);
	Human(const Human&);  //不定义拷贝构造函数,编译器会生成“合成的拷贝构造函数”

	void eat();
	void sleep();
	void play();
	void work();
	int getAge();
	int getSalary();
	void setAddr(const char *newAddr);
	const char* getAddr();
	int getHC();
	void description();
	
private:
	char		name ;
	int			age ;
	int			salary;
	char		*addr;
	const 
	static int  HC =0 ;
	const string   bloodType ;
};

//初始化列表。
Human::Human():bloodType("A") {
	age = 18;
	salary = 30000;
	HumanCount ++ ;
	//bloodTypeY由于是只读常量,因此不能修改,如果要修改,只有如下的方法才行
	cout<<&HumanCount<<endl;
}

//使用 blodType(bldType)进行灵活的初始化,这样就可以对bldtype进行修改
Human::Human(int age, int salary,string bldType):bloodType(bldType) {
	cout << "调用自定义的构造函数" << endl;
	this->age = age;      //this是一个特殊的指针,指向这个对象本身
	this->salary = salary;
	

	addr = new char[64];
	strcpy_s(addr, 64, "China");
	HumanCount ++ ;
	cout <<&HumanCount<<endl;
}

Human::Human(const Human &man) {
	cout << "调用自定义的拷贝构造函数" << "参数:" << &man
		 << " 本对象:" << this << endl;

	age = man.age;      //this是一个特殊的指针,指向这个对象本身
	salary = man.salary;
	name = man.name;
	// 深度拷贝
	addr = new char[64];
	strcpy_s(addr, 64, man.addr);
	HumanCount++;
	cout<<&HumanCount<<endl;
}

void Human::eat() {
	cout << "吃炸鸡,喝啤酒!" << endl;
}

int Human::getHC() {
	cout<<HC<<endl;
	return HC;
}
void Human::sleep() {
	cout << "我正在睡觉!" << endl;
}

void Human::play() {
	cout << "我在唱歌! " << endl;
}

void Human::work() {
	cout << "我在工作..." << endl;
}



int Human::getAge() {
	return age;
}

int Human::getSalary() {
	return salary;
}

void Human::setAddr(const char *newAddr) {
	if (!newAddr) {
		return;
	}

	strcpy_s(addr, 64, newAddr);
}

const char* Human::getAddr() {
	return addr;
}
void Human::description () const{
	//addr ="USA" ;
	//salary +=123; const 成员函数不可可以发生改变任何常量的值
	cout<<"age"<<age<<endl;
	cout <<"salary"<<salary<<endl;
	cout<<"bloddtype"<<bloodType<<endl;
}

void test(Human man) {
	cout << man.getSalary() << endl;
}

void test2(Human &man) { //不会调用拷贝构造函数,此时没有没有构造新的对象
	cout << man.getSalary() << endl;
}

Human test3(Human &man) {
	return man;
}

Human& test4(Human &man) {
	return man;
}

void test(){
	Human tmp1;
	Human tmp2;
	cout<<HumanCount<<endl;


}
int main(void) {
	Human h1(25,3000,"B");
	Human h2;
	test();
	const human h3;
	h1.getHC();
	cout<<HumanCount<<endl;
	
	h1.description();
	h3.description();
	system("pause");
	return 0;
	
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020041922045026.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTg1MTE3OA==,size_16,color_FFFFFF,t_70)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值