类外定义的成员函数,内置成员函数,对象成员的引用------c++对c的扩充(5)

1. 在类外定义成员函数

# include <iostream>
# include <vector>
# include <string>
using namespace std;
class Student {
private:
	int num;
	string name;
	char sex;
public:
	//这个位置特别重要,必须要做函数声明,在定义函数之前,如果你是想写类外函数的话
	void display();
	void setname();
};
//::作用域限定符当成员函数定义在类外时,使用该符号表明这个函数属于哪一个类
//没有作用域限定符号的话,就是默认该函数在当前作用域中的display函数,
void Student::setname() {
	cin >> sex >> num >> name;
}
void Student::display() {
	cout << sex << endl;
	cout << num << endl;
	cout << name << endl;
}
int main() {
	Student student;
	student.setname();
	student.display();
}
//::display()  以及display() 效果是一样的,两者都是全局函数也就是一般的函数
//类函数必须现在类体中作原型声明,


优点:
在类的内部声明,外部定义函数,是 编程的一个优良习惯,相对于比较长的函数,放在外面的话,减少类的长度,使类体清晰,便于阅读,而且能使类的接口和类的实现细节分离

2. 内置成员函数
如果在类体中定义的成员函数,不包括循环等控制结构,c++系统会自动的对于他们作为内置函数处理。
c++要求对 一般 内置函数用关键字“inline”声明,但对类内定义的成员函数,可以省略inline,因为这些成员函数已经被隐含地指定为内置函数。

# include <iostream>
# include <vector>
# include <string>
using namespace std;
class Student {
private:
	int num;
	string name;
	char sex;
public:
	
	void display() {
		cout << sex << endl;
		cout << num << endl;
		cout << name << endl;
	}
	void setname() {
		cin >> sex >> num >> name;
	}
};


int main() {
	Student student;
	student.setname();
	student.display();
}

定义在类外的成员函数,系统必定是不会把其当作内置函数,所以如果想实现让他变为内置函数,则需要在函数定义之前加上关键字”inline“,或者是在类中声明的时候写上关键字”inline“
在这里插入图片描述

在这里插入图片描述
这两者均可。
ps:只有在类外定义的成员函数规模很小,并且使用频率较高时,才指定为内置函数。

3.对象成员的引用

(1)
通过对象名和成员运算符访问对象中的成员。
这种是最常见的,就不多说什么了。
(2)
通过指向对象的指针访问对象中的成员。

//假如,现在有一个名叫std的类,
//此时我定义一个对象st,以及std类型的指针p
std st,*p;//这样就完成了,需要特别注意的是,
//指针的类型是和对象的类型相同的,就是类都是std。
//接着我们给p赋值;
p = &st;//这一步就把p和st联系到一起了,
//p指向的是st这个对象,
//也就是操作*p和操作st这个对象是类似的,
//所以输出
p->hour;*p).hour;
st.hour;
//这是一样的

(3)
通过对象的引用来访问对象中的成员
这里和设置变量的引用时一个意思,就是给对象换一个名字,两者是在同一空间里面的,

std ti;
std &s = ti;//完成赋值
cout<<ti.hout<<s.hour;
//两者输出一致。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值