C++继承(1)

献给我最爱的笨笨

C++面向对象三个主要特征:封装、继承与多态。而继承机制是实现对象多态的基础。

另外,C++支持多重继承(即可以有多个父类),这也是许多人诟病所在。

(以下程序均在Windows7,VS2010环境下测试通过)

 

1)关于父类的私有成员

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

class Super{
public:
	Super(){m_str="super";}
	void SuperPublicShow(){SuperPrivateShow();}
private:
	void SuperPrivateShow(){cout<<m_str<<endl;}
	string m_str;
};

class Sub:public Super{
public:
	Sub(){}
//	void ShowSuperPrivate(){cout<<m_str<<endl;}//父类私有成员无法访问
//	void CallSuperPrivate(){SuperPrivateShow();}//父类私有成员无法访问
	void CallSuperPublic(){SuperPublicShow();}//间接访问父类私有成员
};

int main(){
	Sub obj;
	obj.SuperPublicShow();		//父类共有成员,继承后仍可访问
//	obj.SuperPrivateShow();		//父类私有成员无法访问
//	obj.ShowSuperPrivate();
	obj.CallSuperPublic();
//	obj.CallSuperPrivate();
	return 0;
}

多啰嗦一句:类的私有成员的访问器和修改器很重要,即使当前类使用不到,考虑到以后类的扩展,至少要定义一组受保护的访问器和修改器。

另外,请大家思考一下类Super中SuperPublicShow()方法为什么可以调用SuperPrivateShow(),要看清楚它们声明与定义的次序。

2)类族中的函数重载?

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

class Super{
public:
	Super(){m_str="super";}
	void ShowString(){cout<<m_str<<endl;}
private:
	string m_str;
};

class Sub:public Super{
public:
	Sub(){}
	void ShowString(string s){cout<<s<<endl;}
};

int main(){
	Sub obj;
	obj.ShowString("With Parameter");//调用子类函数
	//obj.ShowString();//调用父类函数
	return 0;
}

子类中的函数名与父类中的相同则隐藏父类成员。(要搞清楚覆盖与隐藏的区别)

以上讨论只针对公有继承,且暂时不考虑虚函数


 

猜你喜欢

转载自blog.csdn.net/shang_1991/article/details/7380551