类,才是与C一个很重要的区别。
类,就是将一些东西放在一起,这样的说的话有点像结构。可是类不仅如此,放在的一起的东西不仅有数据成员,也有函数。对了,还有函数。也就是说类是一个独立体,它可以完成自己数据的加工。不像结构只有数据。
当然类也是一种数据结构类型,也可以像正常的数据类型一样制造出很多对象。这些对象具有类的一切成员。
1. 类的声明
关键是class
例如
- class class_name {
-
int x,y;
-
public:
-
void set_values (int,int);
-
int area (void);
-
}object_name;
大家注意到有个public:,它的意思是说,下面的成员是公共的,谁都可以访问。
当然还有
private: 私有的,自己的,自己和自己的朋友可以访问
protect:自己,自己的朋友和自己的子女(派生类)可以访问
由类产生的对象,如何访问自己的成员?
结构的对象怎么访问,它就怎么访问。其实在C++里,struct,union也是类,和class声明的类不一样的地方在于成员的默认权限。
class默认成员是私有的,struct和union是公共的;同时,union又和它们有区别的:它一次只能有一个成员。
说回来,访问是用".",object_name.member_name;
再说说函数
一般类里的函数只声明,定义放在外面。当然函数定义如果很短,那就不必了。
在外面的定义的规则是什么?
用两个冒号,例如
void object_name::set_value (int a, int b) { ...}
说了这么多,搞了类有什么好处呢?
类就是做个类型,一个数据类型,就可以想常规的类型一样,可以搞出很多对象。而且这些对象成员是一样,就像复制一样,搞了这么多,就可以分别用在不同地方(输入的数据不一样)。
2. 构造函数和析构函数
这是干什么的?一个类,有数据成员,那这些数据成员总要赋值吧,不放数据怎么玩?这就由构造函数完成。像刚刚的例子就没有构造函数,这样很不安全,容易错啊。构造函数把这个做了,那析构函数干什么?跟构造函数反着干。构造函数搞了这么多,很占内存的,所以一旦对象被销毁,析构函数会被自动调用。释放内存。
那在类中怎么声明这两个函数呢?
两个函数的名字都和类的名字一样,只不过析构函数的名字前再加个“~”
对上面的例子可以进行改进。
- #include <iostream>
-
using namespace std;
-
-
class Crectangle {
-
int width, height;
-
public:
-
Crectangle (int,int); //构造函数
-
~Crectangle (); //析构函数
-
int area () {return (width*height);};
-
-
};
-
-
Crectangle::Crectangle (int a, int b) { //构造函数定义
-
width = new int; //分配int型内存空间
-
height = new int;
-
*height = b; //将b放进内存
-
*width = a;
-
}
-
-
Crectangle::~Crectangle () { //析构函数定义
-
delete width; //释放内存
-
delete height;
-
}
-
-
int main () {
-
-
Crectangle rect (3, 4), rectb (5, 6);
-
cout<<"rect area: "<<rect.area ()<<endl;
-
cout<<"rect area: "<<rectb.area ()<<endl;
-
-
return 0;
-
}
提醒下,有个默认的构造函数
就是说,你不做个构造函数,也会有个默认的。但是你一旦声明了一个,它就失效了。
还有就是这些由类生成的对象,我们可以新生成一个对象,然后将以前的对象复制给它。
Crectangle a (3,4);
Crectangle b(a); //这是可以的,将构造函数和数据复制给它了。
3. 过载
这个以前说过吧,不过说的是函数。
这次说的也是函数,不过是构造函数。只有它是函数,也可以过过载嘛。
也就是说,我可以定义很多个构造函数。
这不多说了,以前函数说了,没有什么区别。
4. 指向类的指针
说来说去,还是这么东西。以前说过结构,同样也能被指针指啊。
没有区别,更何况结构本来也是个类。
体会就是:只有是个数据类型,你就能被指针指来指去。
今天就到这,明天继续说类,谁叫类这么多花样呢。
阅读(1080) | 评论(0) | 转发(0) |