類的繼承與繼承方式

1.繼承

繼承是面向對象的三大特徵之一(封裝、繼承與多態)。使用繼承可以減少重複代碼,下面分別不使用繼承與使用繼承實現相同的功能,看下效果:
 

#include<iostream>
using namespace std;
//  普通實現頁面
//java 頁面
//class Java
//{
//public:
//	void header()
//	{
//		cout << "首頁、公開課、登錄、註冊......(公共頭部)" << endl;
//	}
//	void footer()
//	{
//		cout << "幫助中心、交流合作、站內地圖.....(公共底部)" << endl;
//	}
//	void left()
//	{
//		cout << "Java、Python,c++........(公共分類列表)" << endl;;
//	}
//	void content()
//	{
//		cout << "Java學科視頻" << endl;
//	}
//};
//C++頁面
//class CPP
//{
//public:
//	void header()
//	{
//		cout << "首頁、公開課、登錄、註冊......(公共頭部)" << endl;
//	}
//	void footer()
//	{
//		cout << "幫助中心、交流合作、站內地圖.....(公共底部)" << endl;
//	}
//	void left()
//	{
//		cout << "Java、Python,c++........(公共分類列表)" << endl;;
//	}
//	void content()
//	{
//		cout << "C++學科視頻" << endl;
//	}
//};
//Python頁面
//class PY
//{
//public:
//	void header()
//	{
//		cout << "首頁、公開課、登錄、註冊......(公共頭部)" << endl;
//	}
//	void footer()
//	{
//		cout << "幫助中心、交流合作、站內地圖.....(公共底部)" << endl;
//	}
//	void left()
//	{
//		cout << "Java、Python,c++........(公共分類列表)" << endl;;
//	}
//	void content()
//	{
//		cout << "Python學科視頻" << endl;
//	}
//};

//繼承實現頁面   ---繼承的好處:減少重複的代碼
//語法:  class 子類 :繼承方式 父類
//子類  也稱爲  派生類
//父類  也稱爲  基類
class BasePage
{
public:
	void header()
	{
		cout << "首頁、公開課、登錄、註冊......(公共頭部)" << endl;
	}
	void footer()
	{
		cout << "幫助中心、交流合作、站內地圖.....(公共底部)" << endl;
	}
	void left()
	{
		cout << "Java、Python,c++........(公共分類列表)" << endl;;
	}
};
//java 頁面
class Java :public BasePage
{
public:
	void content()
	{
		cout << "Java學科視頻" << endl;
	}
};
//c++ 頁面
class CPP :public BasePage
{
public:
	void content()
	{
		cout << "C++學科視頻" << endl;
	}
};

//Python 頁面
class PY :public BasePage
{
public:
	void content()
	{
		cout << "Python學科視頻" << endl;
	}
};
void test01()
{
	cout << "Java下載頁面"<<endl;
	Java ja;
	ja.header();
	ja.footer();
	ja.left();
	ja.content();

	cout << "-------------------------"<<endl;
	cout << "C++下載頁面" << endl;
	CPP c;
	c.header();
	c.footer();
	c.left();
	c.content();
}
int main()
{
	test01();
	system("pause");
	return 0;
}

  上面被隱掉的是沒有利用繼承,可以看出來,不用繼承方式實現的代碼有很多重複代碼,利用繼承就可以減少重複代碼,是的代碼更加簡潔。

 

2.繼承的方式

繼承一共有三種方式:

  • 公共繼承
  • 保護繼承
  • 私有繼承

#include<iostream>
using namespace std;
//繼承方式
class Base1
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};

//公共繼承
class Son1 :public Base1
{
public:
	void func()
	{
		m_A = 10; //父類中的公共權限成員 到子類中依然是公共權限
		m_B = 10; //父類中的保護權限成員 到子類中依然是保護權限
		//m_C = 10; //父類中的私有權限成員 子類訪問不到
	}
};

void test01()
{
	Son1 s1;
	s1.m_A = 100;
	//s1.m_B = 100; //m_B是保護權限 類外訪問不到
}

//保護繼承
class Son2 :protected Base1
{
public:
	void func()
	{
		m_A = 10;    //父類中的公共權限成員 到子類中依然是保護權限
		m_B = 10;   //父類中的保護權限成員 到子類中依然是保護權限
		//m_C = 10; //父類中的私有權限成員 子類訪問不到
	}
};

void test02()
{
	Son2 s2;
	//s2.m_A = 100;  //在Son2中m_A變成了保護權限,因此類外訪問不到
	//s2.m_B = 100; //m_B是保護權限 類外訪問不到
}

//私有繼承
class Son3 :private Base1
{
public:
	void func()
	{
		m_A = 10;    //父類中的公共權限成員 到子類中依然是私有權限
		m_B = 10;   //父類中的保護權限成員 到子類中依然是私有權限
	    //m_C = 10; //父類中的私有權限成員 子類訪問不到
	}
};

class GrandSon3 :public Son3
{
public:
	void func()
	{
		//m_A = 10;    //在Son3中m_A變成了私有權限,父類中的私有權限成員 子類訪問不到
		//m_B = 10;   //父類中的私有權限成員 子類訪問不到
	    //m_C = 10; //父類中的私有權限成員 子類訪問不到
	}
};
void test03()
{
	Son3 s3;
	//s3.m_A = 100;  //在Son3中m_A變成了私有權限,因此類外訪問不到
	//s3.m_B = 100; //m_B是私有權限 類外訪問不到
}

int main()
{
	
	system("pause");
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章