C++ 基类、派生类对象指针的声明与使用
2014-12-15 14:40
411 查看
1、类指针、对象指针
class x{
//…
public:
voidshow();
};
main()
{
x x1,*ptr1; //定义类x的对象x1和类x的指针ptr1
x x2,*ptr2; //定义类x的对象x2和类x的指针ptr2
x*ptr3; //定义类x的指针ptr3
//…
ptr1 =&x1; //将指针ptr1指向x1对象
ptr2 =&x2; //将指针ptr2指向x2对象
ptr1-> show(); //
ptr2-> show(); //
ptr3-> show(); //指针ptr3直接指向的是类,调用类公有段成员函数
}
2、引入派生类后的对象指针
(1)指向基类对象的指针可以指向它的公有派生的对象,指向私有派生对象错误;
eg:
class base{
//…
};
class derive:base{
//…
};
main()
{
base obj1, *ptr1;
derive = obj2;
ptr1 = &obj1;
ptr1 = &obj2; //错误,指向了一个私有派生类对象
}
(2)指向派生类对象的指针不能指向基类的对象;
eg:
main()
{
base obj1, *ptr1;
derive obj2, *ptr2;
ptr2 = *obj2; //将指针ptr指向派生类对象obj2
ptr2 = *obj1; //错误
//…
}
(3)指向基类对象的指针,指向派生类对象时,只能直接指向派生类中从基类继承来的成员,不可直接访问派生类中特定成员;
(4)但可以采用其他方法实现指针指向派生类中特定成员
eg:
class base{
//…
public:
voidshow();
voidshow1();
};
class derive: public base{
//…
public:
void show();
void show2();
};
main()
{
base obj1, *ptr1;
derive obj2, *ptr2;
ptr1 = &obj1; //指针指向基类对象obj1
ptr1 -> show(); //调用基类base的公有段成员函数show
ptr1 = &obj2; //指针指向派生类对象obj2
ptr1 -> show(); //调用派生类对象obj2从基类继承来的公有段成员函数show
((derive *) ptr1) -> show(); //调用派生类对象obj2的特定成员函数show()
((derive *) ptr1) -> show2(); //调用派生类对象obj2的特定成员函数show2()
ptr1 = &obj1; //指针重新指向基类对象obj1
ptr1 -> show1(); //调用基类公有段成员函数show1()
}
class x{
//…
public:
voidshow();
};
main()
{
x x1,*ptr1; //定义类x的对象x1和类x的指针ptr1
x x2,*ptr2; //定义类x的对象x2和类x的指针ptr2
x*ptr3; //定义类x的指针ptr3
//…
ptr1 =&x1; //将指针ptr1指向x1对象
ptr2 =&x2; //将指针ptr2指向x2对象
ptr1-> show(); //
ptr2-> show(); //
ptr3-> show(); //指针ptr3直接指向的是类,调用类公有段成员函数
}
2、引入派生类后的对象指针
(1)指向基类对象的指针可以指向它的公有派生的对象,指向私有派生对象错误;
eg:
class base{
//…
};
class derive:base{
//…
};
main()
{
base obj1, *ptr1;
derive = obj2;
ptr1 = &obj1;
ptr1 = &obj2; //错误,指向了一个私有派生类对象
}
(2)指向派生类对象的指针不能指向基类的对象;
eg:
main()
{
base obj1, *ptr1;
derive obj2, *ptr2;
ptr2 = *obj2; //将指针ptr指向派生类对象obj2
ptr2 = *obj1; //错误
//…
}
(3)指向基类对象的指针,指向派生类对象时,只能直接指向派生类中从基类继承来的成员,不可直接访问派生类中特定成员;
(4)但可以采用其他方法实现指针指向派生类中特定成员
eg:
class base{
//…
public:
voidshow();
voidshow1();
};
class derive: public base{
//…
public:
void show();
void show2();
};
main()
{
base obj1, *ptr1;
derive obj2, *ptr2;
ptr1 = &obj1; //指针指向基类对象obj1
ptr1 -> show(); //调用基类base的公有段成员函数show
ptr1 = &obj2; //指针指向派生类对象obj2
ptr1 -> show(); //调用派生类对象obj2从基类继承来的公有段成员函数show
((derive *) ptr1) -> show(); //调用派生类对象obj2的特定成员函数show()
((derive *) ptr1) -> show2(); //调用派生类对象obj2的特定成员函数show2()
ptr1 = &obj1; //指针重新指向基类对象obj1
ptr1 -> show1(); //调用基类公有段成员函数show1()
}
相关文章推荐
- 若使用基类指针delete派生类对象,需将基类和派生类的析构函数声明为virtual
- C++基类指针指向的派生类对象内存的释放
- c++中使用基类指针Vector 存放子类对象(0xcccccccc 处未处理的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突 )
- C++ 派生类指针强制指向基类对象
- 【C++】基类指针可以指向派生类对象,派生类指针不可以指向基类对象
- 关于c++在内存布局意义下使用派生类指针访问基类
- C++ 基类指针指向派生类对象
- C++ 基类指针指向派生对象/派生类指针指向基类对象
- C++中使用基类指针调用派生类中定义的方法
- C++中,基类的指针指向派生类的对象
- C++ 派生类指针强制指向基类对象
- C++ 派生类指针指向基类对象
- 关于C++基类、派生类的引用和指针
- (了解)类前置声明实现接口和实现分离 必须使用指针 且不能作为基类
- 关于基类、派生类、对象、指针和虚函数、多态、 静态绑定、 动态绑定 纯虚函数、抽象类
- [疑问]C/C++中为什么在类外利用多态基类指向派生类指针可以调用类的私有成员函数?
- 关于C++基类、派生类的引用和指针(动态绑定和静态绑定)
- 基类指针指向派生类对象
- C++对象内存布局--虚基类表的使用
- c++的类中,声明一个对象好还是用指针申请一块空间好?