1、类指针、对象指针
//…
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 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:
voidshow();
voidshow2();
};
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()
}
原文地址:http://blog.csdn.net/a670449625/article/details/41943459