C++中,虚函数,引用指针,拷贝复制等知识点总结

1、父类指针,引用子类对象是,指针调用的成员,如果是非虚函数,则调用的是父类的成员函数(即使在子类中有同名函数),普通成员函数;如果是虚函数,则调用子类中函数,在虚函数表中被子类覆盖了;父类指针只能调用父类中存在的成员,如果调用只在子类中存在的成员会失败(尽管指向的对象是子类对象);

2、虚函数在默认实参时,参数值是在编译时确定的。如果通过父类指针调用虚函数,虚函数参数为父类版本,调用的函数实体为子类实体(包括通过父类中非虚函数中调用了虚函数也是这种情况,即调用非虚函数时,是在父类中,然后在非虚函数中调用虚函数时,则传递父类实参,使用子类函数体)

3、注意区分指针引用和初始化,如果是指针和引用,则内存中包含子类的对象,在调用时满足1的规律,即有时调用的是父类成员有时可以调用子类成员,如虚函数。但是用子类对象初始化父类对象时,则只是调用父类的复制构造函数,将子类对象中属于父类的一部分拷贝过去。仅仅只包含父类成员,所以在调用时,不管是虚函数还是非虚函数都是父类成员。

#include <IOSTREAM>
using namespace std;

class Base
{
public:
	Base()
	{
		//Fuction();
	}


	virtual void Fuction(int a=10)
	{
		cout << "Base::Fuction" <<a<< endl;
	}
	void testFun()
	{
		Fuction();
	}
	void FuctionTest()
	{
		cout<<"Base Fuction"<<endl;
	}
};

class A : public Base
{
public:
	A()
	{
		//Fuction();
	}

	virtual void Fuction(int a=20)
	{
		cout << "A::Fuction" <<a<< endl;
	}
	void FunctionTest()
	{
		cout<<"AFunctionTest"<<endl;
	}
};

// 这样定义一个A的对象,会输出什么?

int main()
{
	A a;
// 	Base *b = &a;
// 	a.testFun();
// 	a.Fuction();
// 	b->testFun();
// 	b->Fuction();
	Base b(a);
	b.Fuction();
	b.testFun();
	b.FuctionTest();
	//b->FuctionTest();
	return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值