title: C++继承的基本语法与三种继承方式
tags: CPP
categories:
- Programming
- CPP
cover: >-
https://cdn.staticaly.com/gh/1438802682/image-hosting@master/hexoBlogCtrlCherry/jy5.mcd9y4hyiog.webp
abbrlink: eec960c5
date: 2022-08-14 19:30:59
继承的基本语法
例如我们看到很多网站中,都有公共的头部,公共的底部,甚至公共的左侧列表,只有中心内容不同
接下来我们分别利用普通写法和继承的写法来实现网页中的内容,看一下继承存在的意义以及好处
普通实现:
//Java页面
classJava
{
public:
voidheader()
{
cout<<"首页、公开课、登录、注册...(公共头部)"<<endl;
}
voidfooter()
{
cout<<"帮助中心、交流合作、站内地图...(公共底部)"<<endl;
}
voidleft()
{
cout<<"Java,Python,C++...(公共分类列表)"<<endl;
}
voidcontent()
{
cout<<"JAVA学科视频"<<endl;
}
};
//Python页面
classPython
{
public:
voidheader()
{
cout<<"首页、公开课、登录、注册...(公共头部)"<<endl;
}
voidfooter()
{
cout<<"帮助中心、交流合作、站内地图...(公共底部)"<<endl;
}
voidleft()
{
cout<<"Java,Python,C++...(公共分类列表)"<<endl;
}
voidcontent()
{
cout<<"Python学科视频"<<endl;
}
};
//C++页面
classCPP
{
public:
voidheader()
{
cout<<"首页、公开课、登录、注册...(公共头部)"<<endl;
}
voidfooter()
{
cout<<"帮助中心、交流合作、站内地图...(公共底部)"<<endl;
}
voidleft()
{
cout<<"Java,Python,C++...(公共分类列表)"<<endl;
}
voidcontent()
{
cout<<"C++学科视频"<<endl;
}
};
voidtest01()
{
//Java页面
cout<<"Java下载视频页面如下: "<<endl;
Javaja;
ja.header();
ja.footer();
ja.left();
ja.content();
cout<<"--------------------"<<endl;
//Python页面
cout<<"Python下载视频页面如下: "<<endl;
Pythonpy;
py.header();
py.footer();
py.left();
py.content();
cout<<"--------------------"<<endl;
//C++页面
cout<<"C++下载视频页面如下: "<<endl;
CPPcp;
cp.header();
cp.footer();
cp.left();
cp.content();
}
intmain() {
test01();
system("pause");
return0;
}
继承实现:
//公共页面
classBasePage
{
public:
voidheader()
{
cout<<"首页、公开课、登录、注册...(公共头部)"<<endl;
}
voidfooter()
{
cout<<"帮助中心、交流合作、站内地图...(公共底部)"<<endl;
}
voidleft()
{
cout<<"Java,Python,C++...(公共分类列表)"<<endl;
}
};
//Java页面
classJava : publicBasePage
{
public:
voidcontent()
{
cout<<"JAVA学科视频"<<endl;
}
};
//Python页面
classPython : publicBasePage
{
public:
voidcontent()
{
cout<<"Python学科视频"<<endl;
}
};
//C++页面
classCPP : publicBasePage
{
public:
voidcontent()
{
cout<<"C++学科视频"<<endl;
}
};
voidtest01()
{
//Java页面
cout<<"Java下载视频页面如下: "<<endl;
Javaja;
ja.header();
ja.footer();
ja.left();
ja.content();
cout<<"--------------------"<<endl;
//Python页面
cout<<"Python下载视频页面如下: "<<endl;
Pythonpy;
py.header();
py.footer();
py.left();
py.content();
cout<<"--------------------"<<endl;
//C++页面
cout<<"C++下载视频页面如下: "<<endl;
CPPcp;
cp.header();
cp.footer();
cp.left();
cp.content();
}
intmain() {
test01();
system("pause");
return0;
}
总结:
继承的好处:==可以减少重复的代码==
class A : public B;
A 类称为子类 或 派生类
B 类称为父类 或 基类
派生类中的成员,包含两大部分:
一类是从基类继承过来的,一类是自己增加的成员。
从基类继承过过来的表现其共性,而新增的成员体现了其个性。
继承方式
继承的语法:class 子类 : 继承方式 父类
继承方式一共有三种:
- 公共继承
- 保护继承
- 私有继承
示例:
classBase1
{
public:
intm_A;
protected:
intm_B;
private:
intm_C;
};
//公共继承
classSon1 :publicBase1
{
public:
voidfunc()
{
m_A=10; //可访问 public权限,父类中的公共权限到了子类中依然是公共权限。
m_B=10; //可访问 protected权限,父类中的公共权限到了子类中依然是公共权限。
//m_C; //不可访问
}
};
voidmyClass()
{
Son1s1;
s1.m_A; //其他类只能访问到公共权限
//s1.m_B;报错,到Son1中 m_B是保护权限 类外访问不到
}
//保护继承
classBase2
{
public:
intm_A;
protected:
intm_B;
private:
intm_C;
};
classSon2:protectedBase2
{
public:
voidfunc()
{
m_A=10; //可访问 protected权限
m_B=10; //可访问 protected权限
//m_C = 10; //不可访问
}
};
voidmyClass2()
{
Son2s;
//s.m_A; //不可访问
}
//私有继承
classBase3
{
public:
intm_A;
protected:
intm_B;
private:
intm_C;
};
classSon3:privateBase3
{
public:
voidfunc()
{
m_A=100; //可访问 private权限
m_B=100; //可访问 private权限
//m_C = 100; //不可访问
}
};
classGrandSon3 :publicSon3
{
public:
voidfunc()
{
//Son3是私有继承,所以继承Son3的属性在GrandSon3中都无法访问到Son3中的private成员
//m_A;
//m_B;
//m_C;
}
};