好久没更新了,因为暑假
在浪
作业太多(???)
目录
1.this指针
首先看一个程序:
class number {
public:
int num;
number topval(number b) {
if (num /*a的*/ > b.num) {
return /*???????*/;
} else {
return b;
}
}
};
topval()如果发现自己比别人的小,返回谁?
不妨试试this指针。
“这个”指针?
this指针是指向函数自己的类的,
难理解?
比如:
number a;
a里面每个
成员函数
都有一个this指针,可以理解为有一个声明:
number * this = a;
也就是说,topval()应该这样写:
number topval(number b) {
if (num /*a的*/ > b.num) {
return *this; //this指向a,解除引用就是a
} else {
return b;
}
}
2.类作用域
没什么好讲的。
比如声明:
class Time {
public:
int year, month, day;
int hour, minute, second;
};
想:
cout << year;
是不行的。
就是定义了一个对象也不行:
必须说year是谁的:
Time a;
cout << a.year;
2.1.作用域为类的常量
比如:
class Arr {
public:
const int MAX = 15;
int a[MAX];
};
不行。
int MAX = 15也不行。
2.1.1.
非使用性内存分配
这里需要提到一个概念叫
非使用性内存分配(
Non-usable memory allocation
)
。
在我们定义MAX的时候,Arr只是对内存说:
待会儿运行的时候给我腾一块int空间!
它没有说:
待会儿运行的时候给我一块叫MAX的int空间!
对这种情况,我们有三个解决方法。
2.1.2.枚举常量
我们可以做一个枚举:
class Arr {
public:
enum {MAX = 15};
int a[MAX];
};
这是通常可行的办法。
2.1.3.预处理器常量
可以用预处理器做常量:
#define MAX 15
class Arr {
public:
int a[MAX];
};
不建议大家用预处理器,因为有时候我们会不小心加上等号变成:
#define MAX = 15
就会报错。
2.1.4.静态常量
另外一种方法就是在声明前面放上关键字static:
class Arr {
public:
static int MAX = 15;
int a[MAX];
};
这样MAX会跟其他变量放在一起,不会跟Arr的对象放在一起了,就可以使用了。
2.2.作用域内枚举(C++11)
如果我们有一个程序需要知道衣服和鸡蛋的大小:
enum egg {small, medium, large, jumbo};
//...
enum shirt {small, medium, large, Xlarge, XXlarge};
会没。
那咋办呢?(别凉拌!!!)
可以在enum后面加一个class。
enum class egg {small, medium, large, jumbo};
//...
enum class shirt {small, medium, large, Xlarge, XXlarge};
就可以通过编译。
拜!