当前位置: 首页 > news >正文

张家港保税区规划建设局网站wordpress js合并

张家港保税区规划建设局网站,wordpress js合并,成都大丰网站建设,营销网页⭐上篇模板文章:24. C模板 2 (非类型模板参数,模板的特化与模板的分离编译)-CSDN博客 ⭐本篇代码:c学习 橘子真甜/c-learning-of-yzc - 码云 - 开源中国 (gitee.com) ⭐标⭐是比较重要的部分 目录 一. 继承的基础使用 1.1 继承的格式 1.2 …

⭐上篇模板文章:24. C++模板 2 (非类型模板参数,模板的特化与模板的分离编译)-CSDN博客

⭐本篇代码:c++学习 · 橘子真甜/c++-learning-of-yzc - 码云 - 开源中国 (gitee.com)

⭐标⭐是比较重要的部分

目录

一. 继承的基础使用

1.1 继承的格式

1.2 代码举例

1.3 派生类访问基类成员的变化⭐

二. 继承的复制兼容规则 ⭐

 三. 继承中的作用域

3.1 基类可以访问父类成员函数

3.2 基类与派生类的重定义


一. 继承的基础使用

        继承的面向对象程序设计提高代码复用的重要手段,它允许我们在保持原有类的成员的基础上对这个类进行拓展。之前我们大多都是函数的复用,继承是类的复用。

        被继承的类称为基类(父类),继承基类的类称为派生类(子类)。

        比如我们有一个person类,而学生,职工,教师等类都有着person类的属性(年龄,性别,电话,身份证等)而学生有自己特有的学号,教师职工有自己的工号。

        此时我们就能通过继承让学生,教师,职工类获取person的成员,还能重新定义自己特有的成员。

1.1 继承的格式

class Person
{};class Student :public Person
{};

在新定义的类后面使用一个 : 后面依次接 继承方式 基类

 

1.2 代码举例

#include <iostream>
using namespace std;class Person
{
public:Person(int age = 18, const string& name = "张三"):_age(age), _name(name){};void print(){cout << "姓名:" << _name << " 年龄:" << _age << endl;}
private:size_t _age;string _name;
};class Student :public Person
{
private:string _stuid;
};class Teacher :public Person
{
private:string _tcid;
};int main()
{Person p1;p1.print();Student st1;st1.print();Teacher tc1;tc1.print();return 0;
}

上面代码中我们定义一个person类,在定义学生和教师类来继承person 。

我们都调用print函数,运行结果如下:

可见:学生类和教师类(派生类)都能够继承person类(基类)的姓名,年龄和print函数

1.3 派生类访问基类成员的变化⭐

        继承的方式有三种,public,protected,private。不同的继承方式,子类访问父类有限定。

类成员/继承方式public继承protected继承private继承
基类public成员派生类public成员派生类protected成员派生类private成员
基类protected成员派生类protected成员派生类protected成员派生类private成员
基类private成员派生类不可访问派生类不可访问派生类不可访问

 根据上述表格,我们可以有以下总结

1 基类的private成员在派生类中不可见。即这个成员被派生类继承,但是在派生类的类内类外都无法访问基类的private成员

2 protected继承就是为了解决基类private成员无法在派生类访问的问题(即如果我们想要在派生类访问基类的私有成员,在基类中将其定义为protected成员即可)

3 实际上,为了提高代码的复用和拓展。我们一般都使用public继承

4 class定义类的默认继承方式是private,struct定义类的默认继承方式是public。不过我们在使用中一般都会显示定义类的继承方式。

 

 若是保护成员,在派生类中可以访问

#include <iostream>
using namespace std;class Person
{
public:Person(int age = 18, const string& name = "张三"):_age(age), _name(name){};void print(){cout << "姓名:" << _name << " 年龄:" << _age << endl;}
protected:size_t _age;string _name;
};class Student :public Person
{
public:void show(){cout << "姓名:" << _name << " 年龄:" << _age << endl;}
private:string _stuid;
};int main()
{Person p1;p1.print();Student st1;st1.show();return 0;
}

我们在Student类中定义一个show函数来访问基类的保护成员

二. 继承的复制兼容规则 ⭐

派生类的对象可以赋值给 基类,基类的指针,基类的引用(称为切片,切割)

基类的对象不能赋值给派生类

基类的指针在特定情况下可以强制转化为派生类的指针

代码举例:

#include <iostream>
using namespace std;class Person
{
public:Person(int age = 18, const string& name = "张三"):_age(age), _name(name){};void print(){cout << "姓名:" << _name << " 年龄:" << _age << endl;}
protected:size_t _age;string _name;
};class Student :public Person
{
public:void set(int age, const string& name,int stuid){_age = age;_name = name;_stuid = stuid;}void show(){cout << "姓名:" << _name << " 年龄:" << _age << " ID:" << _stuid << endl;}
private:string _stuid;
};int main()
{Student st1;st1.set(50, "李四", 123456);st1.print();Student st2;Person p1 = st1;	//直接赋值p1.print();Person* p2 = &st2;	//基类指针p2->print();Person& p3 = st2;	//基类引用p3.print();return 0;
}

运行结果如下:

 若是将基类赋值给派生类就会报错

 ​​​​​​

 三. 继承中的作用域

1 在继承中,基类和派生类有自己独立的作用域。对于派生类来说,调用成员的时候会现在自己的类中寻找,如果自己的类中没有定义,再去基类中寻找成员

基类和其派生类有相同名称的成员,派生类会隐藏基类的成员。这两个成员构成重定义。

3 重定义不是重载。虽然两个成员名称相同,但是它两的作用域不一样,不是重载

3.1 基类可以访问父类成员函数

举例代码如下:基类没有print函数,会去父类寻找并调用print函数

#include <iostream>
using namespace std;class Person
{
public:Person(int age = 18, const string& name = "张三"):_age(age), _name(name){};void print(){cout << "姓名:" << _name << " 年龄:" << _age << endl;}
protected:size_t _age;string _name;
};class Student :public Person
{
private:string _stuid;
};int main()
{Student st1;st1.print();return 0;
}

测试结果如下:

 

3.2 基类与派生类的重定义

如果父子类有重定义,子类无法直接调用父类的成员

 

调用自己的成员

#include <iostream>
using namespace std;class A
{
public:void f() { cout << "hello world!" << endl; }
};class B :public A
{
public:void f(int i) { cout << "hello world!" << i << endl; }
};int main()
{A a;B b;a.f();b.f(10);return 0;
}

 如果父子类构成重定义,子类想要访问父类同名成员,需要指定作用域

http://www.yayakq.cn/news/21868/

相关文章:

  • 中国有兼职网站开发网站吗江西省建设厅教育网站
  • 广东建设教育协会网站首页wordpress 根据id获取分类名称
  • 百度站长网站提交搜狗提交入口网址
  • 常德天鹰建设有限公司网站网站建设实训该写哪些内容
  • 做3d效果的网站网站模板
  • 和城乡建设厅官方网站wordpress首页动画设置
  • 网站页面安全监测建设方案网站前端开发框架
  • 自己做网站如何赚钱wordpress素材
  • 做网站技术方法有演员王野天
  • 微商城网站开发视频厦门网页设计学校
  • 东莞网站平台后缀做网站英语老师的简历
  • 有哪些做的比较好的网站logo网站设计图片
  • 石景山网站建设自己做的网站无法访问
  • 专业的营销网站建设公司青岛海西建设集团官方网站
  • 下拉网站导航用ps怎么做帝国软件怎么做网站
  • 吴忠市建设工程质量监督站网站南通住房和城乡建设部网站首页
  • wordpress小说下载站兰州做高端网站的公司
  • 十大招标网站排行榜wordpress二级菜单展开
  • 投稿的网站网页界面设计与制作书籍
  • 拟一份饰品网站建设合同夸克浏览器看片
  • 昆明网站开发哪家好深圳电器公司招聘信息
  • 怎么做网站卖产品asp网站建设与设计
  • 南京做网站公司地点山西省城乡建设厅网站
  • 网站备案是干嘛的wordpress 扫描
  • 贷款网站建设方案深圳产品设计培训学校
  • 网站开发使用哪些开发语言wordpress 中文标题 404
  • 北京综合网站建设报价壁画网站建设
  • 阿里云免费网站站长做2个网站
  • 建设职业学校精品网站做企业网站大约多少钱
  • 湖北长安建设集团股份有限公司网站长沙外贸网站开发