基类指针+子类指针问题

本文探讨了C++中基类指针指向子类对象时的使用和注意事项,包括动态多态性、虚函数的应用、类型转换的安全性等方面,旨在帮助开发者理解这种常见编程模式。

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

class Parent
{
public:
	void geta()
	{
		cout<<"------------------ Parent geta-------------------"<<endl;
	}
	virtual	void getb()
	{
		cout<<"------------------Parent  virtual getb-------------------"<<endl;
	}
};


class child :public Parent
{
public:
	void geta()
	{
		cout<<"------------------ child geta-------------------"<<endl;
	}

	virtual	void getb()
	{
		cout<<"------------------child  virtual getb-------------------"<<endl;
	}


	void cgeta()
	{
		cout<<"------------------ child cgeta-------------------"<<endl;
	}

};




int _tmain(int argc, _TCHAR* argv[])
{

	Parent *p=NULL;
	child *pp=NULL;
	
	Parent parent;
	child child;

	p=&parent;
	p->geta();
	p->getb();

	p=&child;
	p->geta();
	p->getb();


	pp=(child*)(&parent);		//报错   子类指针不能指向父类对象
	pp->geta();
	pp->getb();
	pp->cgeta();
	
	return 0;

}

<pre name="code" class="html">
/*基类指针问题    1:若基本中函数为非虚函数          则按指针类型输出,不管基类指针指向的是基类对象还是子类对象,均输出基类的方法。           2:若基类中函数是虚函数       则执行多态的问题。    3:基类指针不能指向基类中没有的方法(子类新增的方法)(编辑器中报错)    4:不能将基类对象的地址赋值给基类指针。(编译器报错,不能强转)    5:什么类型的指针,就可决定其  -> 能够有什么方法,而不是依据对象来的。指针类型决定。    即:基类指针可以指向子类对象,而子类指针不能指向父类对象。1:如果你以一个"基类之指针"指向一个"派生类之对象",那么经由该指针你只能调用该基类所定义的函数2、如果你以一个“派生类之指针”指向一个“基类之对象”,你必须先做明显的转型操作(explicit cast),这种作法很危险。3、如果基类和派生类都定义了“相同名称之函数”,那么通过对象指针调用成员函数时,到底调用了那个函数,必须视该指针的原始类型而定,   而不是视指针实际所指的对象的类型而定*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值