C++基础语法----类的继承(1),最新手淘前端高级面试题及答案

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

  • 子类可以看成特殊的基类;---------------【比基类多一些新的属性或方法】

  • 子类拥有父类的成员属性与函数-------【基类公有的、被保护的可以直接用,私有的以函数为跳板可以间接使用】

  • 子类的对象可以当作基类对象使用----【与前两个性质无异】

  • 子类可以有父类没有的方法与属性----【可以定义新的属性与方法扩展】

二、继承的方式与权限:

=============================================================================

1.基类属性子类使用权限


继承父类的方法与属性,如果在父类中是私有属性,那么无论何种属性继承在子类中都不能使用;

打个比方;

父亲的公有属性就是父亲的姓名; public 【儿子可以知道】

父亲的被保护成员就是家里面的银行密码; protected 【儿子可以共享】

父亲的私有成员就是父亲的爱人; private 【儿子不可以与父亲共享】

【有些秘密不可以让儿子知道】

2.继承权限


公有继承: 将基类的属性与方法继承下来;权限不变;

(最常使用):只不过基类的私有权限可以继承但是不能使用;

保护继承: 对与基类中被保护的和公有的属性,方法全部改为被保护;私有的仍为私有;

私有继承: 将父类中的属性与方法以私有权限继承下来;但父类的私有权限仍只能在父类中使用;

子类继承下来的成员方法,只能在子类中使用;

三、static关键字在基类时,如果属性是公有,那么也可以被子类进行共享:

=======================================================================================================

需要注意的是:类中的static变量要进行显示的初始化;

初始化语法是: 类型 static 类名::变量名=XXX;(其实是在告诉编译器给他分派内存)

四、继承的构造与析构:

=============================================================================

1 构造函数调用顺序


基类>组合类>自己;(如果级别相同那么顺序由定义顺序决定)

析构与构造相反;

2 如果基类没有不含参的构造函数,那么必须在构造子类对象时对其初始化


语法(子类的构造函数对父类属性进行初始化):

子类名 (参数列表) :基类1名(参数列表),基类2名)(参数列表){函数体};

⚠️:在继承中子类仅仅将父类的属性与方法继承了下来,千万不要认为

子类的对象上面还有一个父类;

⚠️:子类对象与父类对象的关系:(符号代表属性与变量)

*** 爷爷类//代代相传代代变强变多【只有三颗*】

***@@@ 爸爸类 【比爷爷类多出三个@】

***@@@$$$ 儿子类 【儿子类有更多的属性与方法】

3 子类初始化基类属性的方法


两个b是同一个b,可以直接初始化父类的属性

只有在基类没有无参构造函数的时候这么写

可以多传几个参数,看个人需求。参数要在子类的构造函数参数列表内。

在这里插入图片描述

4 示例代码


//继承中的构造与析构函数

//构造函数调用顺序是 基类>嵌套类>自己,析构相反

#include

using namespace std;

class A {

private:

int a;

public:

A(int a ) {

this->a = a;

cout << “这里是A的构造函数” << endl;

}

void print() {

cout << "A: "<<a << endl;

}

~A() {

cout << “这里是A的析构函数” << endl;

}

};

class B :public A{

private:

int b;

public:

B(int b=0) :A(b){//要在B构造函数的初始化列表对A进行初始化,

this->b = b;

cout << “这里是B的构造函数” << endl;

}

~B() {

cout << “这里是B的析构函数” << endl;

}

};

int main_01() {

B b1(2);

b1.print();//b1对象既有类A的属性,又有类B的属性;输出的是B类的print

b1.A::print();//输出类A的print;

return 0;

}

五、赋值兼容原则:

===========================================================================

子类可以初始化父类:

初始化时调用父类的拷贝构造函数;

父类的指针与引用可以指向子类;

子类有父类没有的方法,并且可以完成父类的工作;

值得注意的是:

在基类的指针或者引用与子类的对象关联时就好像指针只与子类对象

的一部分进行了关联;仅仅是用子类对象的一部分属性

初始化出来了基类的对象,并且该对象中没有子类的成员属性;

具体实现方法如下:

//基类的指针与引用可以指向子类的对象;

//子类的对象可以对父类进行初始化;

#include

using namespace std;

class A1 {

public:

int a;

int b;

public:

void print() {

cout << “A1 A1:”<<" : "<<a<<b << endl;

}

};

class B1:public A1 {

public:

int a;

int b;

public:

B1(int a, int b) {

this->a = a;

this->b = b;

A1::a = 100;

A1::b = 200;

}

void print() {

cout << " " << B1::a<<" "<< B1::b << endl;

cout << “B1 B1”<<" : "<<a<<b << endl;

}

int getA() {

return a;

}

};

int main_02() {

B1 b1(1, 2);

A1 a1= b1;//(兼容赋值原则)(子类直接给父类的对象赋值)

A1* p = NULL;

p = &b1;//将子类的地址赋给基类的指针;

A1& q = b1;//基类还可以做子类的引用;

// B1* q = NULL;

// q = &a1;也不可以进型子类的指针指向基类的对象

// B1 b2 = a1;可以将子类的对象赋值给父类的对象:不能反向操作;因为子类对象有父类没有的东西;

//分割线*******************************************

cout << “” << endl;

cout << q.a << endl;

q.print();//打印的还是A类的东西;

cout << “-----------------------------0-----” << endl;

p->print();//输出的是A类内的元素;并且调用的是A类的打印函数;

cout << p->a << endl;//打印A类的元素

b1.print();//只有这句话调用了b的打印函数

a1.print();//没有显示的对a1成员属性进行操作:但输出了100 200;如果将a1=b1去掉则输出乱码:

//由此可知b1中的A1::a与A1::b对a1中的a,b进行了初始化;

return 0;

}

六、成员属性或者成员方法重名问题:

===================================================================================

子类与父类难免有些成员属性会重名;由于有作用域的限制子类继承时可以将同名的属性与方法继承下来;

只需在使用时稍加注意即可:

默认情况子类在调用重名属性时会先调用自己的属性;

语法:子类对象名.重名函数;

想要调用基类的是重名属性的方法:(使用域作用符):

语法:子类对象名.基类名::重名属性;【::是域作用符】

七、多继承:

========================================================================

在C++中一个类可以继承多个类;并且拥有他们的属性与方法;

但有时候会产生二义性

总结

秋招即将开始,校招的朋友普遍是缺少项目经历的,所以底层逻辑,基础知识要掌握好!

而一般的社招,更是神仙打架。特别强调,项目经历不可忽视;几乎简历上提到的项目都会被刨根问底,所以项目应用的技术要熟练,底层原理必须清楚。

这里给大家提供一份汇集各大厂面试高频核心考点前端学习资料。涵盖 HTML,CSS,JavaScript,HTTP,TCP协议,浏览器,Vue框架,算法等高频考点238道(含答案)

资料截图 :

高级前端工程师必备资料包

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

87b285a8b90918f35c830c299df8.png)

高级前端工程师必备资料包

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-Y1oleZmz-1713652168956)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 12
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中的继承和派生是面向对象编程中的重要概念。在C++中,可以使用公有继承、保护继承和私有继承来实现继承和派生。 公有继承是最常见的一种继承方式,它可以使得基的公有成员在派生中仍然是公有的,保护成员在派生中变为保护的,私有成员在派生中不可访问。\[1\] 保护继承是一种特殊的继承方式,它可以使得基的公有和保护成员在派生中变为保护的,私有成员在派生中不可访问。\[2\] 私有继承是一种特殊的继承方式,它可以使得基的公有和保护成员在派生中变为私有的,私有成员在派生中不可访问。私有继承主要用于实现"实现继承",即派生通过继承的实现来实现自己的功能。\[3\] 在派生中,可以使用基的成员函数和成员变量,但是访问权限受到继承方式的限制。公有继承和保护继承可以访问基的成员函数和成员变量,私有继承只能在派生内部访问基的成员函数和成员变量。 总结起来,C++中的继承和派生可以通过公有继承、保护继承和私有继承来实现,不同的继承方式决定了派生对基成员的访问权限。 #### 引用[.reference_title] - *1* *2* [C++ 面向对象 - 继承与派生](https://blog.csdn.net/m0_62598965/article/details/124610795)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C++面向对象-继承和派生](https://blog.csdn.net/D23333A/article/details/116640148)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值