Chapter 2 掌握C++

本文介绍了 C++ 面向对象编程的核心概念和技术,包括结构体、类与对象、构造与析构函数、函数重载、this 指针、继承与多态性等关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、结构体

    在C语言中,结构体不能包含函数;C++的结构体可以包含函数。

    在C++语言中,结构体是用关键字struct声明的类。结构体默认情况下,其成员是公有的(public);类默认情况下,其成员是私有的(private)。

2、类与对象

    类的对象若没有进行初始化,则对象中的成员变量在相应的在内存空间中的值是一个随机值。

3、构造函数

    C++,如果一个类没有提供任何的构造函数,则C++提供一个默认的构造函数(由C++编译器提供),这个默认的构造函数是一个不带参数的构造函数,它只负责创建对象,而不做任何的初始化工作。只要一个类定义了一个构造函数,不管这个构造函数是否是带参数的构造函数,C++就不再提供默认的构造函数。也就是说,如果为一个类定义了一个带参数的构造函数,还想要无参数的构造函数,则必须自己定义。
4、析构函数

    析构函数不允许有返回值,且不允许带参数,一个类中只能有一个析构函数。

   注意: 在类中定义成员变量时,不能直接给成员变量赋初值。例如:

class point

{

      int x = 0;       // 错误,此处不能给变量x赋值

      int y;

5、函数的重载(overload)

     重载构成的条件:函数的参数类型、参数个数不同,才能构成函数重载。

     注意:只有函数的返回类型不同是不能构成函数的重载的。

6、this指针

     对象调用成员函数时,成员函数除了接收实参外,还接收该对象的地址,这个地址被隐含的形参this指针所获取,等价于this = &object。

7、子类中调用父类的带参数的构造函数

 例:

  fish(): animal(400, 300)

{

     .........

}

      即:在fish类的构造函数后,加一个冒号(:),然后加上父类的带参数的构造函数。这样,在子类的构造函数被调用时,系统会先去调用父类的带参数的构造函数去构造对象。这种初始化方法,还常用来对类中的常量(const)成员进行初始化。例如:

class point

{

  public:

       point():x(0), y(0){...}

  private:

      const int x;

      const int y;

}

     当然类中的普通成员变量也可以采取此种方式进行初始化,然而,这就没有必要了。

8、类的继承及类中成员的访问特性

基类的访问特性

类的继承特性

子类的访问特性

Public
Protected
Private

Public

Public
Protected
No access

Public
Protected
Private

Protected

Protected
Protected
No access

Public
Protected
Private

Private

Private
Private
No access

9、多重继承

       初始化顺序是按照基类表中的说明顺序进行初始化的

10、虚函数与多态性

     当C++编译器在编译的时候,发现Animal类的breathe()函数是虚函数,这个时候C++就会采用迟绑定(late binding)的技术,在运行时,依据对象的类型(在程序中,我们传递的Fish类对象的地址)来确认调用的哪一个函数,这种能力就做C++的多态性。没有在breath()函数前加virtual关键字时,C++编译器在编译时就确定了哪个函数被调用,这叫做早期绑定(early binding)。

    C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。

    注意:virtual在声明时要添加,定义实现时就不需要加virtual了。(否则会报编译错误)

11、纯虚函数

        virtual void breathe() = 0;

     纯虚函数是指被标明不具体实现的虚函数(纯虚函数也可以有函数体,但这种提供函数体的用法很少见)。

    凡是含有纯虚函数的类叫做抽象类。这种类不能声明对象,只是作为基类为派生类服务。

12、函数的覆盖(override)

     构成覆盖的条件:

        基类函数必须是虚函数(使用virtual关键字进行声明)。

        发生覆盖的两个函数要分别位于派生类和基类中。

        函数名称和参数列表必须完全相同。

      说明:由于C++的多态性是通过虚函数来实现的,所以函数的覆盖总是和多态性关联在一起。在函数覆盖的情况下,编译器会在运行时根据对象的实际类型来确定要调用的函数。

13、函数的隐藏

     所谓隐藏,是指派生类中具有与基类同名的函数(不考虑参数列表是否相同),从而在派生类中隐藏了基类的同名函数。

     函数隐藏的情况:

            (1)派生类的函数与基类的函数完全相同(函数名和参数列表都相同),只是基类的函数没有使用virtual关键字。此时基类的函数将被隐藏,而不是覆盖。(与覆盖进行比较)

            (2)派生类的函数与基类的函数同名,但参数列表不同,在这种情况下,不管基类的函数是否有virtual关键字,基类的函数都将被隐藏。(注意这种情况与函数重载的区别,重载发生在同一个类中)

    区分覆盖和隐藏的方法:函数的覆盖是发生在派生类与基类之间,两个函数必须完全相同,并且都是虚函数。那么不属于这种情况的,就是隐藏了。

    当隐藏发生时,如果在派生类的同名想要调用基类的被隐藏函数,可以使用“基类名::函数名(参数)”的语法形式。

14、引用

     引用就是一个变量的别名,它需要用另一个变量或对象来初始化自身。例:

int a = 5;

int& b= a;     //用&表示申明一个引用。引用必须在申明时进行初始化

15、作用域标识符

    ::叫做作用域标识符,用于指明一个函数属于哪个类或一个数据属于哪个类。::前面如果不跟类名,表示全局函数(即非成员函数)或全局数据

16、在包含头文件时,<>和“”的区别:<>和“”表示编译器在搜索头文件时的顺序不同,<>表示从系统目录下开始搜索,然后再搜索PATH环境变量所列出的目录,不搜索当前目录;“”表示先从当前目录搜索,然后是系统目录和PATH环境变量所列出的目录。所以如果我们知道头文件在系统目录下,就可以直接用<>,这样可以加快搜索速度。

内容概要:本文围绕直流微电网中带有恒功率负载(CPL)的DC/DC升压转换器的稳定控制问题展开研究,提出了一种复合预设性能控制策略。首先,通过精确反馈线性化技术将非线性不确定的DC转换器系统转化为Brunovsky标准型,然后利用非线性扰动观测器评估负载功率的动态变化和输出电压的调节精度。基于反步设计方法,设计了具有预设性能的复合非线性控制器,确保输出电压跟踪误差始终在预定义误差范围内。文章还对比了多种DC/DC转换器控制技术如脉冲调整技术、反馈线性化、滑模控制(SMC)、主动阻尼法和基于无源性的控制,并分析了它们的优缺点。最后,通过数值仿真验证了所提控制器的有效性和优越性。 适合人群:从事电力电子、自动控制领域研究的学者和工程师,以及对先进控制算法感兴趣的研究生及以上学历人员。 使用场景及目标:①适用于需要精确控制输出电压并处理恒功率负载的应用场景;②旨在实现快速稳定的电压跟踪,同时保证系统的鲁棒性和抗干扰能力;③为DC微电网中的功率转换系统提供兼顾瞬态性能和稳态精度的解决方案。 其他说明:文中不仅提供了详细的理论推导和算法实现,还通过Python代码演示了控制策略的具体实现过程,便于读者理解和实践。此外,文章还讨论了不同控制方法的特点和适用范围,为实际工程项目提供了有价值的参考。
内容概要:该论文介绍了一种名为偏振敏感强度衍射断层扫描(PS-IDT)的新型无参考三维偏振敏感计算成像技术。PS-IDT通过多角度圆偏振光照射样品,利用矢量多层光束传播模型(MSBP)和梯度下降算法迭代重建样品的三维各向异性分布。该技术无需干涉参考光或机械扫描,能够处理多重散射样品,并通过强度测量实现3D成像。文中展示了对马铃薯淀粉颗粒和缓步类动物等样品的成功成像实验,并提供了Python代码实现,包括系统初始化、前向传播、多层传播、重建算法以及数字体模验证等模块。 适用人群:具备一定光学成像和编程基础的研究人员,尤其是从事生物医学成像、材料科学成像领域的科研工作者。 使用场景及目标:①研究复杂散射样品(如生物组织、复合材料)的三维各向异性结构;②开发新型偏振敏感成像系统,提高成像分辨率和对比度;③验证和优化计算成像算法,应用于实际样品的高精度成像。 其他说明:PS-IDT技术相比传统偏振成像方法具有明显优势,如无需干涉装置、无需机械扫描、可处理多重散射等。然而,该技术也面临计算复杂度高、需要多角度数据采集等挑战。文中还提出了改进方向,如采用更高数值孔径(NA)物镜、引入深度学习超分辨率技术等,以进一步提升成像质量和效率。此外,文中提供的Python代码框架为研究人员提供了实用的工具,便于理解和应用该技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

johnlxj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值