C++基础语法----类的继承(1),当了项目经理感觉一点意义都没有

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

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

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



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

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

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

正文

在这里插入图片描述

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++中一个类可以继承多个类;并且拥有他们的属性与方法;

但有时候会产生二义性

情况一、虚继承解决构造函数的二义性


ABCD四个类继承如图所示:

A //A是BC的基类

/ \ //BC继承A后可能分别会以不同的方式初始化A

【假设A没有无参构造函数】必须由B或者C进行初始化

B C

\ /

D //D在同时继承BC,如果初始化D的对象时,

调用B还是C的构造函数去初始化A?

这就使编译器十分矛盾;产生了二义性;

解决方法;利用虚继承:virtual关键字在继承时进行限定;

【讲多态的时候会着重讲virtual关键字】

具体实现方法如下:

#include

using namespace std;

class AA {

public:

int a;

AA(int a = 0) {

this->a = a;

}

void print() {

cout << " AA" << endl;

}

};

class BB:virtual public AA {//

public:

int b;

BB(int b = 0):AA(1) {

this->b = b;

}

void print() {

cout << “BB” << endl;

}

};

class CC:virtual public AA {//

public:

int c;

CC(int c = 0):AA(2) {

this->c = c;

}

void print() {

cout << “CC” << endl;

}

};

class DD :public BB,public CC{

public:

int d;

//初始化继承到的基类

DD(int d=0):BB(d),CC(d),AA(d) {//如果不是虚继承 那么不可以直接用DD去初始化AA

this->d = d;

}

void ptint() {

cout << “DD” << endl;

}

};

int main() {

DD d1(666);

cout << “b c d” << endl << d1.b << d1.c << d1.d << endl;

cout << d1.a << endl;

// cout << d1.a << endl;//不明确A是哪个里面的---------解决方案—虚继承virtual

cout << d1.AA::a << endl;//没有虚继承时输出了BB对象的属性

cout << d1.BB::a << endl;//虚继承后输出的均是最后一次对该成员变量的操作的值

cout << d1.CC::a << endl;//virtual会对其自动进行改变

cout << "BB " << sizeof(BB) << "CC " << sizeof(CC) << "DD " << sizeof(DD) << endl;//虚继承输出12 12 24

return 0;//不虚继承输出 8 8 20;

}

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

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

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

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值