父类型指针可以指向子类型的对象。但是对于子类型的指针不能指向父类型的对象(原理)
2014-08-13 13:05
387 查看
<span style="font-size:24px;">//<span style="background-color: rgb(51, 204, 255);">父类型指针可以指向子类型的对象。但是对于子</span><span style="background-color: rgb(102, 102, 204);">类型</span><span style="background-color: rgb(51, 204, 255);">的指针不能指向父类型的对象</span> //reason :父类有的方法子类全有,但是子类有的方法,父类不一定全有(牵扯到isa) //原理:首先看看接收对象的类型是不是有对象要调用的方法,如果有,则看对象(指针变量)指向的那块空间里对应的<span style="color:#6633ff;background-color: rgb(51, 204, 255);">isa</span>(<span style="color:#33ccff;background-color: rgb(204, 102, 204);">类类型</span>,哪个类开辟空间,isa就是哪个类)是否有该方法,如果有,则正确 NSArray *arr = [NSMutableArray arrayWithObjects:@"hh",@"hh",@"hh",@"hh", nil]; NSInteger count = [arr count];//首先NSArray有count这个方法,然后在</span><pre name="code" class="objc">NSMutableArray开辟的空间上继承的isa里看有没有这个方法(NSArray改成NSString则会在看是否有这个方法的时候出错,如果NSArry和NSMutableArray交换一下位置,将count改成addObject方法,则会在编译期出错)NSLog(@"%ld", count);
相关文章推荐
- 为什么基类指针和引用可以指向派生类对象,但是反过来不行?
- void*不是指向对象的类型(这种类型的指针不能指向一个实体)
- 为什么基类指针和引用可以指向派生类对象,但是反过来不行?
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?为什么在类体内可以定义将静态成员声明为其所属类的类型呢 ?
- 为什么基类指针和引用可以指向派生类对象,但是反过来不行?
- 为什么基类指针和引用可以指向派生类对象,但是反过来不行?
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?
- 编写程序定义一个vector 对象,其每个元素都是指向string 类型的指针,读 取该vector 对象,输出每个string 的内容及其相应的长度。
- 第一篇 理解“引用初始化以后不能被改变 指针可以改变所指的对象”这句话
- B继承自A,A指针无法隐式转换为B指针,函数参数只管指针类型,与实际指向对象无关
- 十二章 类————类的数据成员可以是指向自身类型的指针或引用
- 【c++】为什么类的定义中不能包含其自身类型,但是能包含其自身的指针或引用类型
- 类型兼容---子类的对象可以给父类指针赋值
- 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针
- c++函数内部可以返回函数内部定义的指针 但是不能返回函数内部定义的数组
- 用c++编写一个不能被继承的类(但是可以在类外部定义该类的对象)
- 转:博客园父类指针指向子类对象的原理
- 类的定义中不能包含其自身类型,但是能包含其自身的指针和引用类型
- 为什么static成员的类型可以是类本身?又为什么非static成员被限定声明为其自身类对象的指针或引用?