C++继承的一点理解

本人C++刚入门,最近在看C++的继承,感觉越看越糊涂,然后就跑了两段代码(程序员面试宝典里面的变形版)看看,稍微增进了一下理解。

下面把代码贴出来,大家可以跟我一样,先自己想想结果,然后编译一下,看看哪里理解还有偏差。

</pre><pre name="code" class="cpp">#include "stdafx.h"
#include <iostream>
using namespace std;

class A
{
protected:
	int m_data;
public:
	int A_data;
public :
	A(int data = 0)
	{
		m_data = 0;
	}
	int GetData()
	{
		return doGetData();
	}

	int doGetData()
	{
		return m_data;
	}
};


class B :public A
{
// protected: 
// 	int m_data;
public:
	B(int data=2)
	{
		m_data = data;
	}
virtual	int doGetData()
	{
		return m_data;
	}
};

class C:public B
{
// protected:
// 	int m_data;
public:
	C(int data=2)
	{
		m_data = data;
	}
	int doGetData()
	{
		return m_data;
	}
};


void main( )
{
	C c(10);

	cout<<c.GetData()<<endl;
	cout<<c.A::GetData()<<endl;
	
	return ;
}

这个程序的运行结果是10 10

稍微又在前面的程序基础上修改了一下:

#include "stdafx.h"
#include <iostream>
using namespace std;

class A
{
protected:
	int m_data;
public:
	int A_data;
public :
	A(int data = 0)
	{
		m_data = 0;
	}
	int GetData()
	{
		return doGetData();
	}

virtual	int doGetData()
	{
		return m_data;
	}
};


class B :public A
{
protected: 
	int m_data;
public:
	B(int data=2)
	{
		m_data = data;
	}
virtual	int doGetData()
	{
		return m_data;
	}
};

class C:public B
{
protected:
	int m_data;
public:
	C(int data=2)
	{
		m_data = data;
	}
	int doGetData()
	{
		return m_data;
	}
};


void main( )
{
	C c(10);

	cout<<c.GetData()<<endl;
	cout<<c.A::GetData()<<endl;
	
	return ;
}

//
//int _tmain(int argc, _TCHAR* argv[])
//{
//	Base a(2);
//	Derived b(3,4);
//	a.print();
//	b.print();
//	b.Base::print();
//
//	return 0;
//}

答案是2 2

纯虚函数:

再加一点对纯虚函数的理解,今天和同学在讨论,终于明白为什么需要纯虚函数了:在各种封装中,可以把基类的头文件给用户看,用户知道有哪些成员函数可以调用,这些函数都是写作纯虚函数,接着,在派生类中将这些成员函数全部实现,但是这个是用户看不到的,用户知道有这些派生类可以调用,然后有哪些成员函数,就可以了。这样就保证了类的封装性。

在纯虚函数的使用中需要注意的是,如果纯虚函数在派生类中没有全部实现并被覆盖,那么,派生类也还是一个抽象类。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值