今天还是说类,类是C++的重点,东西比较多。
1. 操作符过载
以前看过一些基础的变量类型的操作,int的几个变量相加,相减等。你没有想到类也可以。
C++是以类型为基础的。类就是一个自定义的类型,既然是类型,那就可以进行操作,像加,建,乘,除之类的。
但是也不是像基础类型那样,还是有点特殊。为什么?类的成员那么多?你总得说明下吧。
为了能够实现过载,类定义了一个操作符函数,这个函数名字是operator加上操作符号。
type operator sign (parameters) {}
说个例子
- //operator overload
-
#include <iostream>
-
using namespace std;
-
-
class Cvector {
-
public:
-
Cvector () {}; //申明默认构造函数,目的在于以防没有参数的赋值出现,其实设置为0更好。
-
Cvector (int, int); //申明构造函数
-
Cvector operator + (Cvector); //操作符过载函数申明
-
};
-
-
Cvector::Cvector (int a, int b) {
-
x = a;
-
y = b;
-
}
-
-
Cvector Cvector::operator + (Cvector param) { //操作符过载函数定义
-
Cvector temp;
-
temp.x = x + param.y;
-
temp.y = y + param.y;
-
return temp;
-
}
-
-
int main () {
-
-
Cvector a (3,1);
-
Cvector b (1,2);
-
Cvector c;
-
c = a + b;
-
cout<<"c.x"<<", "<<y;
-
return 0;
-
}
看到没有,定义好了,就没有什么区别了。
c = a + b;
也可以写成
c = a.operator + b;
其他的操作符就不说了,只要记住类也是类型的一种,也可以像基本类型一样进行操作。
2. 关键字this
其实它就是个指针,指向对象自己的指针,而且这个对象的成员函数正在执行。不明白?就是说当一个对象的成员函数正在执行的时候,可以用this指向这个对象,指向自己。
上个例子中不是有个操作符过载函数,在它的定义里,有个语句:
return temp;
你完全可以将它写成 return *this;
3. 静态成员
类中可以包含静态的成员,可以是函数,也可以是数据。
这个就简单了,只要你这个数据成员是静态的,那么在由这个类产生的所有对象中就是一样的。但不是不可以变,变了,所有对象中也是一样的。
就像全局变量,不同的是,这个只在这类生成的对象中起作用。
4. 友元关系
就是朋友关系,这个可以是友元函数,也可以是友元类。
为什么要这个呢?
类的成员是有不同的访问权限的。但是这个对具有友元关系的函数或类来说,就没有限制,是敞开的。
这个友元函数,或友元类必须在这个类中声明,申明的时候前面要加上关键字friend。
又友元函数为例
- //friend function
-
#include <iostream>
-
using namespace std;
-
class Crectangle {
-
int width, height;
-
public:
-
Crectangle (int, int);
-
int area () {return (width&height);}
-
friend Crectangle duplicate (Crectangle); //友元函数
-
};
-
Crectangle::Crectangle (int a, int b) {
-
width = a;
-
height = b;
-
}
-
Crectangle duplicate (Crectangle rect) {
-
Crectangle rectres;
-
rectres.width = rect.width*2;
-
rectres.height = rect.height*2;
-
return *this;
-
}
-
int main () {
-
Crectangle rect (3,4), rectb;
-
rectb = duplicate (rect); //友元函数可以访问对象rect的数据。
-
cout<<rectb.area ();
-
return 0;
-
}
就说到这了,明天还是说类。
阅读(1187) | 评论(0) | 转发(0) |