
目录
一、继承的基本概念
(1)一般语法
1.单继承派生类的语法格式为
2.多继承派生类的语法格式为
(2)派生类的功能主要实现方式
(3)示例代码
二、继承方式
(1)三种继承方式
(2)示例代码
一、继承的基本概念
(1)一般语法 1.单继承派生类的语法格式为引入:自然界中继承的概念十分普遍。例如,猫和狗都属于哺乳动物,具备胎生、哺乳、恒温等共性,又具备各自特性。这种时候我们可以用继承的技术以减少重复的代码。
2.多继承派生类的语法格式为class 派生类名:<继承方式>基类名
{
......//定义派生类新添加的成员
}
(2)派生类的功能主要实现方式class 派生类名:<继承方式>基类名1,......,<继承方式>基类名n
{
......//定义派生类新添加的成员
}
(3)示例代码①吸收基类成员:继承基类所有的数据成员和函数成员。
②改造基类成员:可以重新定义从基类继承的函数成员。
③添加新成员:派生类可以增加新的功能。
从编码的角度看,派生类从基类中以较低的代价换来较大的灵活性:派生类可以对从基类继承过来的功能进行拓展、限制或改变;一旦产生了可靠的基类,只需要调试派生类中所作的修改即可。
#include
using namespace std;
//本段代码模仿某程序教学网页的排版方式,如果不运用继承的知识写出的代码大致如下。可以发现代码中java、python、c++的教学模块大量得进行了复制粘贴,其原因是三个教学模块的排版方式大致相同。
//java的页面
class Java
{
public:
void header()
{
cout << "首页、公开课、登录...(公共头部)" << endl;
}
void footer()
{
cout << "帮助中心、交流合作、地图...(公共底部)" << endl;
}
void left()
{
cout << "Java、Python、C++..(公共分类列表)" << endl;
}
void content()
{
cout << "Java的教学视频" << endl;
}
};
//Python的页面
class Python
{
public:
void header()
{
cout << "首页、公开课、登录...(公共头部)" << endl;
}
void footer()
{
cout << "帮助中心、交流合作、地图...(公共底部)" << endl;
}
void left()
{
cout << "Java、Python、C++..(公共分类列表)" << endl;
}
void content()
{
cout << "Python的教学视频" << 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;
}
};
void test01()
{
cout << "----------------------------" << endl;
cout << "java的下载页面如图所示:" << endl;
Java ja;
ja.header();
ja.footer();
ja.left();
ja.content();
cout << "----------------------------" << endl;
cout << "Python的下载页面如图所示:" << endl;
Python py;
py.header();
py.footer();
py.left();
py.content();
cout << "----------------------------" << endl;
cout << "C++的下载页面如图所示:" << endl;
Cpp c;
c.header();
c.footer();
c.left();
c.content();
}
int main()
{
test01();
system("pause");
return 0;
}
#include
using namespace std;
//下面的代码中就运用了继承的技术。可以看到我们定义了一个公共页面的类,这是下面所有派生类(包括java、python、c++等派生类)的基类。其中的公共头部、公共底部和公共分类列表作为几个派生类的共同特征继承了下来。三个派生类也定义了各自的不同即content)
//统一排版风格的页面
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;
}
};
//Python的页面
class Python:public BasePage
{
public:
void content()
{
cout << "Python的教学视频" << endl;
}
};
//C++的页面
class Cpp:public BasePage
{
public:
void content()
{
cout << "C++的教学视频" << endl;
}
};
void test01()
{
cout << "----------------------------" << endl;
cout << "java的下载页面如图所示:" << endl;
Java ja;
ja.header();
ja.footer();
ja.left();
ja.content();
cout << "----------------------------" << endl;
cout << "Python的下载页面如图所示:" << endl;
Python py;
py.header();
py.footer();
py.left();
py.content();
cout << "----------------------------" << endl;
cout << "C++的下载页面如图所示:" << endl;
Cpp c;
c.header();
c.footer();
c.left();
c.content();
}
int main()
{
test01();
system("pause");
return 0;
}
二、继承方式 (1)三种继承方式
(2)示例代码①公共继承:父类公共->子类公共;父类保护->子类保护;父类私有->子类私有
②保护继承:父类公共->子类保护;父类保护->子类保护;父类私有->子类私有
③私有继承:父类公共->子类私有;父类保护->子类私有;父类私有->子类私有
④总结:三种继承方式,是什么继承方式,除私有权限外的两种权限就变为什么权限(如保护继承,除了私有权限在子类中仍为私有权限,其他的都变为了保护权限)
#include
using namespace std;
//公共继承
class Base01
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
//保护继承
class Base02
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
//私有继承
class Base03
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
//继承公共继承
class Son01 :public Base01
{
public:
void func()
{
m_A = 10; //父类公共->子类公共
m_B = 10; //父类保护->子类保护
m_C = 10; //会报错,说明父类中的私有权限子类访问不了
}
};
//继承保护继承
class Son02 :protected Base02
{
public:
void func()
{
m_A = 10; //父类公共->子类保护
m_B = 10; //父类保护->子类保护
m_C = 10; //会报错,说明父类中的私有权限子类访问不了
}
};
//继承私有继承
class Son03 :private Base03
{
public:
void func()
{
m_A = 10; //父类公共->子类私有
m_B = 10; //父类保护->子类私有
m_C = 10; //会报错,说明父类中的私有权限子类访问不了
}
};
void test01()
{
Son01 s1;
s1.m_A = 100; //不会报错,父类公共->子类公共,类外可以访问
s1.m_B = 100; //会报错,因为父类保护->子类保护,类外不能访问
Son02 s2;
s2.m_A = 100; //会报错,因为父类公共->子类保护,类外不能访问
s2.m_B = 100; //会报错,因为父类保护->子类保护,类外不能访问
Son03 s3;
s2.m_A = 100; //会报错,因为父类公共->子类私有,类外不能访问
s2.m_B = 100; //会报错,因为父类保护->子类私有,类外不能访问
}
//以上规则拓展到子类的子类也是同理
int mian()
{
test01();
system("pause");
return 0;
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)