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;
//两者输出一致。