2.1 类的声明和对象的定义
类和对象的关系:类是对象的抽象,对象是类的实例。对象的类型称为类。
声明类的类型:
class Student{ //声明类的类型
private: //私有部分
int num;
char name[20];
char sex;
public: //公有部分
void display(){
cout<<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;
};
Student stud1,stud2; //定义了该类的对象stud1和stud2
C语言中的struct关键字声明的结构体类型仍然保留,且将其功能也扩展了,可以用来声明类。但其和class关键字的主要区别为:用struct声明的类,如果其成员未作private或public的声明,则系统默认是public的,而class的成员默认为private的。
2.2 类的成员函数
类的成员函数是函数的一种,他的用法和作用和一般函数基本一样,两者主要区别为它属于一个类的成员,出现在类体中。成员函数可以被指定为private、public或者protected。一般的做法是将需要被外界调用的成员函数指定为public,他们是类的对外接口。
2.2.1 在类外定义成员函数
class Student{
private:
int num;
char name[20];
char sex;
public: void display();
};
void Student::display(){
cout<<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;
}
Student stud1,stud2;
其中“::”为作用域运算符,Student::display()代表Student类作用域中的display函数。
2.2.2 内置成员函数(inline成员函数)
和内置函数一样,内置成员函数也会将成员函数的代码直接嵌入到主调函数中。而C++为了减少时间开销,在类体中定义的成员函数中不包括循环等控制结构,C++会自动的将他们作为内置函数来处理。
应该注意的是:如果成员函数不在类体内定义,而在类体外定义,系统并不是把它默认为内置函数,而是正常调用。如果想将他们指定为内置函数,则需要用inline进行显式声明。
2.2.3 成员函数的存储方式
成员函数的存储不占有对象的存储空间,对象的大小只取决于该对象中的数据成员所占的空间。对象通过this指针来指向不同的对象。
2.3 对象成员的引用
三种方法:
1.通过对象名和成员运算符访问对象中的成员;
2.通过对象的指针访问对象中的成员;
3通过对象的引用访问对象的成员;
//方法1
stud1.num=1001; //如果对象的该数据成员为public,即可如此赋值
stud1.display(); //调用对象stud1的公用成员函数
//方法2
class Time{
public:
int hour; //公用数据成员
int minute;
};
Time t,*p; //定义对象t和指针变量
p=&t; //使p指向t
cout<<p->hour; //输出p之下昂的对象中的数据成员hour
//方法3
Time t1; //定义对象t1
Time &t2=t1; //定义Time类引用t2,并初始化为t2
cout<<t2.hour; //输出t1中的成员hour
2.6 类的封装性和信息隐蔽
接口与实现分离:类的共用接口和私有实现的分离,形成信息隐蔽。
当接口与实现分离时,只要类的接口没有改变,对私有实现的修改不会引起程序的其它部分的修改。