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;
}