类的定义体现了抽象数据类型的思想,可以用以支持说明与实现的分离,将抽象数据类型的实现封装在类的内部,使达到信息隐蔽的目标。
#include <iostream>
using namespace std;
class Point{ //类定义
public: //共有域
Point(int,int);//构造函数
Point(Point &);//复制构造函数
~Point();
//析构函数
int get_x();
//存取函数
int get_y();
void put_x(int a);
void put_y(int b);
Point operator+(Point p);//重载函数:当前对象+参数表中对象p
Point operator*(int i); //重载函数:当前对象*参数表中整数i
int operator>(Point p); //重载函数:判断当前对象>参数表中对象p否
int operator<(Point p); //重载函数:判断当前函数<参数表中对象p否
int operator==(Point& p);//重载函数:判断当前函数==参数表中对象p否
private:
int x;
int y;
friend istream& operator>>(istream& in,Point& p);//友元函数:输入
friend ostream& operator<<(ostream& out,Point& p);//友元函数:输出
};
ostream& Point::operator<<(ostream& strm,Point p){
return strm<<"("<<p.get_x()<<","<<p.get_y()<<")";
};
c++扩充了C中struct型的功用,加进成员函数以说明一个类。
在c++中struct和class的区别在于:在struct中,默认访问级别是public,
在class中,默认访问级别是private。
除此之外class与struct是等价的。
与struct一样,union也可以定义类。c++中union可以包含函数和变量,还可以包含构造函数和析构函数。union保留了所有C的特性,让所有的数据成员共享相同的存储空间,在程序语言设计中称之为“等价变量”。
与struct和class相比,union可节省存储。union默认存取级别是public。
建立类的对象也称为实例化,可以自动的,或静态的,或动态分配来建立。
Point p(6,3); //自动的
Point q; //自动的
static Point s(3,4) //静态的
Point *t = new Point (1,1) //通过动态分配
构造函数
Point ::Point(int a,int b){x=a;y=b;}
或
Point ::Point(int a,int b):x(a),y(b){}
两种形式等效。
析构函数
当要撤销对象时,需要隐式调用另一个函数,叫做析构函数。
一个类可以定义几个构造函数,但只能定义一个析构函数。
当控制要退出自动变量的作用域时,或当通过delete命令释放一个动态分配的变量时,就调用析构函数。
当main函数执行结束是将释放静态声明的变量。
一个析构函数用于在删除一个类的对象时做清除工作。