Chinaunix首页 | 论坛 | 博客
  • 博客访问: 105075
  • 博文数量: 25
  • 博客积分: 514
  • 博客等级: 下士
  • 技术积分: 690
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-07 01:22
个人简介

漂泊海外的游子

文章分类

全部博文(25)

文章存档

2015年(2)

2013年(1)

2012年(22)

分类: C/C++

2012-02-22 01:12:18

今天还是说类,类是C++的重点,东西比较多。

1. 操作符过载
以前看过一些基础的变量类型的操作,int的几个变量相加,相减等。你没有想到类也可以。
C++是以类型为基础的。类就是一个自定义的类型,既然是类型,那就可以进行操作,像加,建,乘,除之类的。
但是也不是像基础类型那样,还是有点特殊。为什么?类的成员那么多?你总得说明下吧。

为了能够实现过载,类定义了一个操作符函数,这个函数名字是operator加上操作符号。
type operator sign (parameters) {}
说个例子
  1. //operator overload
  2. #include <iostream>
  3. using namespace std;

  4. class Cvector {
  5.   public:
  6.   Cvector () {};                  //申明默认构造函数,目的在于以防没有参数的赋值出现,其实设置为0更好。
  7.   Cvector (int, int);                                      //申明构造函数
  8.   Cvector operator + (Cvector);                            //操作符过载函数申明
  9. };

  10. Cvector::Cvector (int a, int b) {
  11.     x = a;
  12.     y = b;
  13. }

  14. Cvector Cvector::operator + (Cvector param) {            //操作符过载函数定义
  15.     Cvector temp;
  16.     temp.x = x + param.y;
  17.     temp.y = y + param.y;
  18.     return temp;
  19. }

  20. int main () {

  21.   Cvector a (3,1);
  22.   Cvector b (1,2);
  23.   Cvector c;
  24.   c = a + b;
  25.   cout<<"c.x"<<", "<<y;
  26.   return 0;
  27. }
看到没有,定义好了,就没有什么区别了。
c = a + b;
也可以写成
c = a.operator + b;
其他的操作符就不说了,只要记住类也是类型的一种,也可以像基本类型一样进行操作。

2. 关键字this
其实它就是个指针,指向对象自己的指针,而且这个对象的成员函数正在执行。不明白?就是说当一个对象的成员函数正在执行的时候,可以用this指向这个对象,指向自己。

上个例子中不是有个操作符过载函数,在它的定义里,有个语句:
return temp;
你完全可以将它写成 return *this;

3. 静态成员
类中可以包含静态的成员,可以是函数,也可以是数据。
这个就简单了,只要你这个数据成员是静态的,那么在由这个类产生的所有对象中就是一样的。但不是不可以变,变了,所有对象中也是一样的。

就像全局变量,不同的是,这个只在这类生成的对象中起作用。

4. 友元关系
就是朋友关系,这个可以是友元函数,也可以是友元类。
为什么要这个呢?
类的成员是有不同的访问权限的。但是这个对具有友元关系的函数或类来说,就没有限制,是敞开的。

这个友元函数,或友元类必须在这个类中声明,申明的时候前面要加上关键字friend。

又友元函数为例
  1. //friend function
  2.     #include <iostream>
  3.     using namespace std;
  4.     class Crectangle {
  5.     int width, height;
  6.     public:
  7.     Crectangle (int, int);
  8.     int area () {return (width&height);}
  9.     friend Crectangle duplicate (Crectangle);                //友元函数
  10.     };
  11.     Crectangle::Crectangle (int a, int b) {
  12.     width = a;
  13.     height = b;
  14.     }
  15.     Crectangle duplicate (Crectangle rect) {
  16.     Crectangle rectres;
  17.     rectres.width = rect.width*2;
  18.     rectres.height = rect.height*2;
  19.     return *this;
  20.     }
  21.     int main () {
  22.     Crectangle rect (3,4), rectb;
  23.     rectb = duplicate (rect);                       //友元函数可以访问对象rect的数据。
  24.     cout<<rectb.area ();
  25.     return 0;
  26.     }

就说到这了,明天还是说类。




阅读(1185) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~