基类指针与派生类指针的相互转换
2011-06-01 15:42
351 查看
基类指针与派生类指针的相互转换
1,直接用基类指针引用基类对象
2,直接用派生类指针引用派生类对象
3,用基类指针引用一个派生类对象,由于派生类对象也是基类的对象,所以这种引用是安全的,
但是只能引用基类成员。若试图通过基类指针引用那些只在派生类中才有的成员,编译器会报告语法错误。(解决该问题的答案是虚函数和多态性)
4,用派生类指针引用基类的对象。这种引用方式会导致语法错误。派生类指针必须先强制转换为基类指针,这种方法是安全的。
而在侯捷的深入浅出MFC中第二章C++重要性质中:
1、如果你以一个"基类之指针"指向一个"派生类之对象",那么经由该指针你只能调用该基类所定义的函数
2、如果你以一个“派生类之指针”指向一个“基类之对象”,你必须先做明显的转型操作(explicit cast),这种作法很危险。
3、如果基类和派生类都定义了“相同名称之函数”,那么通过对象指针调用成员函数时,到底调用了那个函数,必须视该指针的原始类型而定,而不是视指针实际所指的对象的类型而定,这与第1点其实意义相通。
#include
#include
using namespace std;
class A
{
public:
char str[20];
void f(){cout<<"class A" //象指针this
pb->add();
//由于pa指向的是父类对象的地址,这个指针被强制转换为派生类指针后,会出现内存越
//界访问的情况,是不安全的.
pb->i=100;
char dsd[100];
strcpy(pb->sb, " class B's sb.");
strcpy(pb->str, " class A's str.");
//pb->f()调用的具体函数,视指针的原始类型而定,而不是视指针实际所指的对象的
//类型而定.如果是虚函数,则视实际所指的对象的类型而定
pb->f();
pb->ff();
pb->fff();
system("PAUSE");
return 0;
}
附上连接:转载请标明出处:
http://ltiger.blog.sohu.com/40050539.html
1,直接用基类指针引用基类对象
2,直接用派生类指针引用派生类对象
3,用基类指针引用一个派生类对象,由于派生类对象也是基类的对象,所以这种引用是安全的,
但是只能引用基类成员。若试图通过基类指针引用那些只在派生类中才有的成员,编译器会报告语法错误。(解决该问题的答案是虚函数和多态性)
4,用派生类指针引用基类的对象。这种引用方式会导致语法错误。派生类指针必须先强制转换为基类指针,这种方法是安全的。
而在侯捷的深入浅出MFC中第二章C++重要性质中:
1、如果你以一个"基类之指针"指向一个"派生类之对象",那么经由该指针你只能调用该基类所定义的函数
2、如果你以一个“派生类之指针”指向一个“基类之对象”,你必须先做明显的转型操作(explicit cast),这种作法很危险。
3、如果基类和派生类都定义了“相同名称之函数”,那么通过对象指针调用成员函数时,到底调用了那个函数,必须视该指针的原始类型而定,而不是视指针实际所指的对象的类型而定,这与第1点其实意义相通。
#include
#include
using namespace std;
class A
{
public:
char str[20];
void f(){cout<<"class A"
pb->add();
//由于pa指向的是父类对象的地址,这个指针被强制转换为派生类指针后,会出现内存越
//界访问的情况,是不安全的.
pb->i=100;
char dsd[100];
strcpy(pb->sb, " class B's sb.");
strcpy(pb->str, " class A's str.");
//pb->f()调用的具体函数,视指针的原始类型而定,而不是视指针实际所指的对象的
//类型而定.如果是虚函数,则视实际所指的对象的类型而定
pb->f();
pb->ff();
pb->fff();
system("PAUSE");
return 0;
}
附上连接:转载请标明出处:
http://ltiger.blog.sohu.com/40050539.html
相关文章推荐
- 基类指针与派生类指针的相互转换
- 基类指针与派生类指针的相互转换
- C++基类、派生类指针转换
- 基类和派生类指针转换--dynamic_cast
- 派生类地址比基类地址少4(子类与基类指针强行转换的时候,值居然会发生变化,不知道Delphi BCB是不是也这样) good
- 基础才是重中之重——派生类集合与基类集合可以相互转换吗?
- 基类指针指向派生类对象和隐式转换
- C++ NEW的使用及 基类指针转换成派生类指针 及static_cast和dynamic_cast的说明
- C++ NEW的使用及 基类指针转换成派生类指针 及static_cast和dynamic_cast的说明
- 基类(base class)和派生类(derived class)指针在C++的相互转化
- 第三回 基础才是重中之重——派生类集合与基类集合可以相互转换吗?
- C++ Primer 面向对象编程 15.3 基类派生类相互转换 15.4. 构造函数和复制控制
- 基类和派生类指针转换--dynamic_cast
- 基础才是重中之重——派生类集合与基类集合可以相互转换吗?
- 继承中派生类指针转换为基类指针
- 强制类型转换为基类指针与赋值兼容规则下转换为基类指针的比较
- 标准的I / O流和文件描述符相互关联(文件描述符与文件指针间的转换)
- 指向基类/派生类指针,指向基类成员/派生类成员指针,及互相赋值
- 派生类向基类转换的可访问性
- 基类指针指向派生类对象