类学习一。(红皮书36-54)
2016.3.19
一、红皮书2.3.3提到的内置成员函数inline:
1、有点像define,inline是把这段函数嵌入到了主函数中,在简单的编程中适合规模小且频繁使用的函数。
2、在类体中定义的成员函数,C++会自动的置为内置函数处理,程序在调用这些函数的时候,并不是真正的执行函数的调用过程(保存返回地址并转到),而是把函数代码嵌入到函数的调用点。
3、类中的成员函数,如果在内部直接定义相当于inline display();若在外部定义,则默认不是inline函数。
4、若成员函数定义在外部,若声明为inline函数,则定义声明必须在同一个头文件中,但不利于信息隐蔽
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
//如果是struct,其中只包括数据不包括函数,函数在外部定义
//注意C++中允许这样声明一个类
struct Student//声明一个名为Student的结构体
{
//里面是数据,没有函数
int num;
int name[100];
char sex;
};
//声明两个结构体变量如下:
Student std1, std2;
/*--------------struct和class的对比------------------*/
//struct变成了class,类的生明中除了有数据还有函数,其中
//函数分为公私有,默认为私有
//注意C++中允许用struct声明一个类,默认所有的函数变量在没有声明的情况下为公有的
//即struct Students{}
class Students
{
public:
int num;
char sex;
//可在内部直接定义,也可在外部定义(在外部定义是好习惯)
//如果在内部直接定义相当于inline display
//若在外部定义,则默认不是inline函数
void display();
private:
char name;
};
//类的声明与sturct相同
Students stu1, stu*;
//类外访问只能访问公有的
//-----------访问成员方式1------------------:
stu1.num;
stu1.display();
//--------访问成员的方式2-------------(定义指针):
stu=stu1;//使指针指向对象stu1
cout<<stu->sex;//输出指针指向对象的成员sex的值
//---------访问成员方式3---------------(使用引用):
Students &stu2=stu1;//引用stu2,并初始化为stu1
cout<<stu2.sex;
//在外部定义成员函数的格式:
void Students::display()//Students::代表这个函数属于哪个类,若不声明的话就是全局的
{
cout << "num"<<num<<endl;
cout << "name" << name << endl;
cout << "sex" << sex << endl;
}
二、成员函数的存储方式
一个对象所占的空间大小只取决于数据成员所占的空间,与成员函数无关。(成员函数为公用的函数代码,每个对象使用同一个函数(this指针指定是那个函数在使用),但结果不同)即成员函数代码段不占用对象的存储空间
三、对对像成员的访问
见代码中的详细说明