类和对象
简单的说,类就是一种用户定义的数据类型,跟结构类似。不同的是结构不能含有函数,而C++的类中既包含数据成员,又包含成员函数,通过它们可以对类自身进行操作。如:汽车可以看作是发动机、车轮、座椅等诸如此类的集合。也可以从功能的角度来研究,譬如,能移动,加速,减速,刹车等,那么汽车就可以看成是一个类。
类的定义可以分为说明部分(做什么)和实现部分(怎么做):。说明部分主要是说明数据成员的类型和名字,以及用来对数据成员进行处理的成员函数的声明。简单成员函数的实现也可以放在说明部分。实现部分是各个成员函数的实现。
类也是一种自定义的数据类型,也可以定义类的变量,我们叫做实例或者对象。所有对类的操作都必须通过对象来实现。当一个类定义了多个对象时,每个对象拥有各自的数据成员和成员函数。
类的成员(包括成员函数和数据成员)都有一个属性,叫做访问权限,有三种:
1.私有成员(private):缺省情况下,一个类中的所有成员都是私有的。私有成员只能被类本身的成员函数访问。并且不具有继承性,也就是子类也不能访问到私有成员。
2.公有成员(public):公有成员可以被类的成员函数使用,也可以被类外部的函数使用。
3.保护成员(protected):类的保护成员能被类及其派生类的成员函数和友员函数使用,具有继承性。简单说就是子类和友员可以访问,其他外部函数不能访问。
上面子类和友员还没学,不过你都会知道的!!!
怎么定义类和对象,怎么使用对象,栗子在哪里?例子就在下面:
class Point
{
public:
void setXY(int a,int b){x=a;y=b;}
void move(int a,int b);
void printPoint(){cout<<"x= "<<x<<" y= "<<y<<endl;}
int getX(){return x;}
int getY(){return y;}
private:
int x,y;
};
void Point::move(int a,int b)
{
x+=a;
y+=b;
}
上面定义了类Point,只有两个数据成员x和y,分布代表横纵坐标值,是Point类的私有成员,只有Point类的成员函数才能访问到。Point类的成员函数有5个,都很简单,实现都可以写在声明部分。Move函数我们拿出来做例子,没写在声明部分,而是写在了实现部分。注意Move前面的Point::,"::"是域运算符,表示成员函数属于哪个类。
再注意一下哈,我们可以把这部分代码单独保存为一个.h的头文件(例如Point.h), 以后其他文件的函数需要用到Point类时,只需要加入#include "Point.h"就可以了。
#include <iostream>
#include "Point.h"
using namespace std;
void main()
{
Point p1,p2,*p;
p1.setXY(3,4);
p2.setXY(1,2);
p=&p1;
p->move(2,3);
p2.move(3,4);
p->printPoint();
p1.printPoint();
p2.printPoint();
}
第2行就是包含Point类定义的头文件。你要是保存成mypoint.h,记得这里要改成#include "mypoint.h"
第6行定义Point类的对象p1,p2,还定义了一个指向Point对象的指针p。
第7行开始就是调用对象的成员函数了,注意两点:
1.用指针取成员函数是'->',用对象名取成员函数是'.'。咦,这句话怎么这么熟悉,老师之前应该说过的吧。
2.要理解每个对象拥有各自的数据成员和成员函数这句话,打印出来可以看到p1的x和y值,与p2的x和y值是不同的。p1和p2有不同的内存空间,用来存放这些数据成员和成员函数。