————————————重载——————————————————
函数或方法的重载
在 C++ 语言中, 将功能一致的函数或方法封装起来, 为了适应
不同的条件与环境, 将函数或方法的名字写成一样的, 以便程序员使用
构成重载的条件, 是函数或方法名一样, 参数的类型与数量和顺序要求不一样
*/
/*
double inputNum() {
return 0;
}
*/
// 一般 重载只与函数名与参数有关
// 判断重载的方法步骤
// 1, 将函数体与函数的返回类型去掉
// 函数名 (参数列表)
// 2, 将形式参数的变量名去掉, 只留类型名
// 得到的结果, 没有重复的就是重载, 如果重复就是错误
// 写一个函数, 要求输入数字, 但是需要提供两个参数, 数字要求在这两个参数的范围内
int inputNum(int min, int max) {
int temp;
while (1) {
scanf("%d", &temp);
while (getchar() != '\n');
if(temp >= min && temp < max) {
break;
}
}
return temp;
}
double inputNum(double min, double max) {
double temp;
while (1) {
scanf("%lf", &temp);
while (getchar() != '\n');
if(temp >= min && temp < max) {
break;
}
}
return temp;
}
——————————————————————————————
static 可以用在局部变量前, 可以用在全局的变量前, 还可以用在全局的函数前
1, 用在局部变量前, 表示全局变量, 扩展的变量的作用范围, 扩展的变量的生命周期
2, 用在全局的变量和函数的前面, 表示这个变量与函数是私有的, 只能在本文件中被访问
在 OC 中, static 可以用在原来 C 语言中使用的地方
除此之外, 在 OC 中还可以放在类的方法里, 表示全局变量, 与放在函数中局部变量前一样
——————————————————————————————
// OC 中提供了两个关键字, 一个是 self 一个是 super
// self 使用在实例方法中, 代表的是当前对象
// self 使用在类方法中, 代表类, 或者类名
// 在实例成员(字段, 属性, 实例方法)中
// 如果需要显式的访问实例字段, 使用
// self->字段名
// 如果需要调用实例方法, 使用
// [self 方法名]
// 在类方法中, self 不再是实例对象了, self 表示类, 或者是类名
————————————$——————————————————
继承的特征
1, OC 中都是单继承
也就是说, 每一个类只允许有一个父类
2, OC 中继承是可以传递的
3, OC 中所有的类, 都是直接或间接的继承自 NSObject
4, OC 中类方法会被继承下来, 要求在 interface 中声明, 要求使用 .h 和 .m 文件编写
5, OC 中实例方法也可以被继承下来, 要求在 interface 中声明, 要求使用 .h 和 .m 文件编写
6, OC 中成员变量(字段)有几个访问级别修饰符:
@public 公有的, 表示在任何地方都可以访问字段
@protected 默认, 表示只允许在本类和子类中访问
@private 只允许在本类中访问
7, OC 中受保护的和共有的字段会被继承下来, 私有的不会被继承下来(有争议)
——————————————————————————————
// 里氏转换原则
// 1, 子类对象可以直接赋值给父类的变量
// Student *stu = [Student new];
//
// [stu instanceMethod]; // 结果 子类
//
// Person *p = stu;
// // Person 类型的指针与 Student 类型的指针可以指向同一个数据
//
// [p instanceMethod]; // 结果: 父类 子类
// 2, 父类对象可以转换为指定的子类对象
Person *p = [Teacher new];
p = [Student new];
[p instanceMethod];
// Student *stu = p;
//
// [stu instanceMethod];
——————————————————————————————
——————————————————————————————
——————————————————————————————