const,对象指针--c++d对c的扩充

  • 指向成员函数的指针
    定义:void (Time::*p)();//定义一个指针未初始化,必须指明所属类名。
    初始化:p = &Time::display;//p指向display这个函数
    调用:(t1.*p)();
    实现:
#include<iostream>
using namespace std;
class human_;
class human {
private:
	int age;
	string name;
public:
	void get_() {
		cin >> age >> name;
	}
	void display(human_&);
};
class human_{
private:
	string add;
public :
	void get_1() {
		cin >> add;
	}
	friend void human::display(human_ &);
};
void human::display(human_& x){
	cout << x.add << endl;
	cout << age <<" " << name << endl;
}
int main() {
	human hum;
	//hum.get_();不带参
	void (human:: * p)();
	p = &human::get_;
	(hum.*p)();

	human_ hum_;
	hum_.get_1();
	//hum.display(hum_);以下为带参
	void (human:: * pp)(human_&);
	pp = &human::display;
	(hum.*pp)(hum_);

}
  • 常对象
    定义:const Time t1 = (1,2,3);或 Time const t1 = (1,2,3);(Time 是类名 ,t1是新定义的对象名)。
    特性:①常对象是不可以调用普通成员函数的,只可以调用常成员函数,但常成员函数中不可有修改数据的语句。
    ②常成员函数是常对象对外的为一出口。
    ③常对象必须要有初值。
    ④对象中的所有数据成员的值都不可改变
    何时采用常对象:
    当一个对象中的所有数据成员都不可被修改时,则可定义一个常对象,定义完之后,用常成员函数调用对象中的数据成员。
    若该对象中只有一部分的数据是需要不被更改的,则定义这部分的数据为常变量(不需要定义常对象),接着,可定义非const成员函数(普通成员函数)调用这些数据。
    实现:
#include<iostream>
using namespace std;
class human {
private:
	int age;
	string name;
public:
	void get_() {
		cin >> age >> name;
	}
	void dis() const{
		cout << "constA" << endl;
	}
};

int main() {
	
	const human hum_1;//定义常对象
	hum_1.get_();//报错 常对象是不可以调用非const成员函数的
	hum_1.dis();//常成员函数是常对象对外的唯一接口

}
  • 常数据成员
  1. 常数据成员
    定义:const int t1;//与普通的常变量相似,其数据不可被改变。
    特性:①只可通过构造函数的参数初始化表对常数据成员进行初始化,任何其他函数都不能对常数据成员赋值。

  2. 常成员函数
    定义:void Time::display() const(类体内Time::则不需要写)
    类型名 函数名(参数表)const
    特性:①常成员函数是不可调用另一个非const成员函数,因为如果可以了,则改变了常成员函数的属性,它自身是不能存在修改变量值的语句的,但是非const成员函数该函数之中是可以写修改变量数值的语句的。
    ② 常成员函数可以引用const成员变量,也可以引用非const成员变量。但是均不可改变数值大小。
    ③const成员变量既可以被const成员函数调用也可被非const成员函数调用,但是数值不可被改变。
    实现:

# include <iostream>
using namespace std;
class person {
	string name;
	string sex;
	const int id;
public:
	person() :id(0) {
		name = " ";
		sex = " ";
	}
	void get_() {
		//cin >> name >> sex >> id;//错误 常成员变量只能通过参数表构造函数初始化
		cin >> name >> sex;
	}
	void display() const{
		cout << name << " " << sex << ' ' << id << endl;//常成员函数中既可以调用普通变量也可以调用常成员变量
	}
	void cou_() {
		cout << id;//常成员变量可被普通成员函数引用
		cout << "constA" << endl;
		
	}
};
int main() {

}
  • 指向对象的常指针
    定义:Tiem*constp = &p1;
    关键:常指针,该指针自身的内容(存放的地址)是不可改变的,也就是指针始终指向一个东西,但不表示指针所指向的变量或者对象不能改变其数值。
int main() {
	person p1;
	person *const p = &p1;//定义是对const修饰的变量必须初始化
}

用途:常用来作为形参,表示不改变指向始终指向原来的对象。
实现指向对象的常指针作为形参:

# include <iostream>
using namespace std;
class person {
	string name;
	string sex;
	const int id;
public:
	person() :id(0) {
		name = " ";
		sex = " ";
	}
	void get_() {
		//cin >> name >> sex >> id;//错误 常成员变量只能通过参数表构造函数初始化
		cin >> name >> sex;
	}
	
	void cout_(person *const p) {//指向对象的常指针作为形参
		cout << p->id << endl;
	}
};
int main() {
	person pp;
	pp.get_();
	pp.cout_(&pp);

}
  • 指向常对象的指针变量
    定义:const person *p
    关键:指向常对象的指针,它自身是与一般的指针没有什么区别,关键在于他指向的是一个常对象(或者其他变量),也就是说,其数据成员不可修改,但是指针的指向是可以改变的。
    特性:①指向常对象的指针,也可以指向普通变量,但此时不可通过该指针修改普通变量的值,因为此时使用该指针访问该变量,改变了具有了常变量不可改变的属性。
    ②当定义形参为指向常变量的指针时,实参可以是普通的,也可以是const的。
    ③一个常对象(变量),可以指向它的只有指向常对象的指针,而普通指针是不可以的(非法)。
  • 常引用
    定义:const person&x = pp;
    如果不希望在函数中修改实参pp的值 就可以把形参x声明为常引用,
    常引用经常作为形参,可保证实参不被修改,保证数据的安全。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值