基类指针指向派生类对象

本文介绍了C++中基类指针能够指向派生类对象的基本原理,强调了通过基类指针只能访问继承自基类的共有成员,无法直接访问派生类独有的特性。同时,给出了示例说明基类指针不能调用派生类特有的方法或成员,如`SetB()`和`ShowB()`,并指出派生类指针不能直接指向基类对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

根据C++指针的定义,一种类型的指针不能指向另一种类型的变量。

  • 基类指针可以指向派生类的对象
  • 派生类指针不可以指向基类对象
  • 注意:即使将一个基类的指针指向一个派生类的对象,通过该指针也只能访问派生类中从基类继承来的共有成员,不能访问派生类中新增加的成员,\

除非通过强制转换将基类指针转换为派生类指针

例子:利用基类的指针指向其派生类的对象

#include <iostream>
using namespace std;

class A
{
public:
	void SetA(int i) { a = i; }
	void ShowA() { cout<<"a = "<<a<<endl;};
private:
	int a;
};
class B : public A
{
public:
	void SetB(int i) { b = i; }
	void ShowB() { cout<<"b = "<<b<<endl; }
private:
	int b;
};
int main()
{
	A a, *pa;          //pa为基类对象的指针
	B b, *pb;          //pb为派生类对象的指针
	pa = &b;           //基类指针pa指向派生类对象b
	pa->SetA(100);     //通过基类指针pa访问派生类B中从基类A继承来的共有成员
	pa->ShowA();

	pb = (B *)pa;      //将基类指针强制转换为派生类指针
	pb->SetB(200);     //不能通过基类指针pa访问派生类自己定义的成员
	pb->ShowB();

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值