从零开始的C++(六)

这篇具有很好参考价值的文章主要介绍了从零开始的C++(六)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.类和对象补充:

静态成员,有静态成员函数和静态成员变量,特点是不为类的某个对象所有,而是为同类所有对象共有。因为是为同类对象共同拥有,所以计算对象的大小的时忽略静态成员。因为静态成员是放在静态区,对象的作用只是确定类域,所以(类名*)0->静态成员名是可以访问的,不会引发报错。

静态成员不能给缺省值,因为静态成员的初始化不是在初始化列表里进行,而是在类外进行。(假设是在初始化列表内进行,不就相当于一个对象对应一个静态成员了吗)同时,类内的只是声明,定义需要在类外(定义的时候需要写类名,且定义与声明必须分离)。

静态成员函数:无this指针,因为不是特别对于某个对象。

调用方式有三种:类名::函数名;对象名.函数名;类名().函数名;

静态成员函数内只能有静态成员,不能有非静态成员(因为没有this指针,无法访问非静态的)。但是非静态成员函数内可以有静态、非静态的成员。

利用构造函数、静态成员、定义数组可以实现一些简单的循环过程。(如从1加到n的求和等)

2.友元:

分为友元函数和友元类

友元函数:无this指针(因为不是成员函数),因为没有this指针,所以无法将const写在形参和函数体之间。一个函数可以是多个类的友元函数。友元函数在类内的声明可以在类内任何位置,且不受类内的访问限制符(如public/private等)的影响。

友元类:(注:很容易理解反!)  如果希望类A能访问类B的私有成员,则类A是类B的友元,类B内声明类A是友元。

从零开始的C++(六),c++,开发语言

友元类是单向的,如类A是类B的友元,则类A可以访问类B私有成员,但类B不能访问类A的私有成员。同时,友元类也没有传递性,比如类C是类A的友元,类A是类B的友元,但类C不是类B的友元,即类C不能访问类B的私有成员。

友元类很容易混,因此不建议多用!

3.内部类:

顾名思义,就是在一个类的声明内有另一个类的声明,此时“另一个类”就是内部类,而外部的就是外部类。从零开始的C++(六),c++,开发语言

此时求外部类的大小的时候忽略内部类,因为内部类和外部类本质上是两个相互独立的类。

内部类的特点:1.受外部类的访问限定符和类域的影响。2.可以访问外部类的私有成员(内部类天生是外部类的友元)3.定义内部类的对象“外部类::内部类 +对象名。

4.编译器的某些优化

因为不同编译器、编译器版本的影响,优化的内容可能有所不同,此处主要说明一些比较常见的优化,了解即可。

1.函数实参、形参之间是值传递的时候,调用的是拷贝构造。(如果不重写拷贝构造是浅拷贝、重写可能是深拷贝)

2.匿名对象具有常性,如果引用一个匿名对象,则引用必须用const修饰。同时,匿名对象做函数实参,形参必须用const修饰。(在用const修饰以后,匿名对象的生命周期被延长,可以视为匿名对象转变成了有名对象(名字就是形参名或引用名))

3.在例如函数返回值、对象初始化时如果出现连续的构造、拷贝构造,编译器可以优化成一步构造。(常出现与用隐式转换、匿名对象的场合)。

4.函数返回值是一个对象时,是先把该对象用拷贝构造给一个临时对象,在用赋值的方式把临时对象赋给实际接收的对象。

从零开始的C++(六),c++,开发语言

5.拷贝构造和赋值不能合并。

从零开始的C++(六),c++,开发语言

5.内存管理:

1.C++兼容c,因此malloc、calloc、realloc、free等依然可以使用。其中calloc=malloc+memset,realloc有原地扩容和异地扩容两种。

2.C++特有的是new和delete.

利用new创建:new+类型:会自动计算大小,且不用强制类型转换,对于内置类型不处理,对自定义类型会调用默认构造(能调用构造函数是其一大特点)。此时销毁delete 指针名。

创建数组:new+类型(个数),此时销毁delete[]指针名。

开辟空间同时初始化:new+类型[初始化的值]或new+类型{值1、值2、值3...}

malloc和new的区别:malloc对于自定义类型不做处理,但new可以自动调自定义类型的构造函数,并且可以初始化。同时,delete也会自动调用析构函数并释放空间。

一般的,初始化自定义类型常用匿名函数和隐式类型转换。文章来源地址https://www.toymoban.com/news/detail-728258.html

到了这里,关于从零开始的C++(六)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】从零开始认识泛型编程 — 模版

    送给大家一句话: 尽管眼下十分艰难,可日后这段经历说不定就会开花结果。总有一天我们都会成为别人的回忆,所以尽力让它美好吧。 – 岩井俊二 \\ ⱶ˝୧(๑ ⁼̴̀ᐜ⁼̴́๑)૭兯 //// \\ ⱶ˝୧(๑ ⁼̴̀ᐜ⁼̴́๑)૭兯 //// \\ ⱶ˝୧(๑ ⁼̴̀ᐜ⁼̴́๑)૭兯

    2024年04月28日
    浏览(35)
  • 【从零开始学习C++ | 第二十一篇】C++新增特性 (上)

    目录  前言: 委托构造函数: 类内初始化: 空指针: 枚举类: 总结:         C++的学习难度大,内容繁多。因此我们要及时掌握C++的各种特性,因此我们更新本篇文章,向大家介绍C++的新增特性。 委托构造函数是指一 个类的构造函数调用另一个类的构造函数,以减少代

    2024年02月13日
    浏览(66)
  • 【从零开始学习C++ | 第二十二篇】C++新增特性(下)

    目录 前言: 类型推导: constexpr: 初始化列表: 基于范围的for循环: 智能指针之unique ptr Lambda表达式: 总结:         本文我们将继续介绍   C++ 11 新增十大特性的剩余六个,如果没有看过介绍前四个特性的小伙伴的可以点进我C++的专栏就可以看到。 类型推导(

    2024年02月14日
    浏览(59)
  • 从零开始学习R语言编程:完全指南

    R语言是一种流行的数据分析语言,广泛应用于学术界、商业界和社会科学研究等领域。与其它数据分析软件相比,R语言的优点包括免费开源、高效可靠、具有强大的数据分析和可视化能力等。R语言的编程基础包括了各种控制结构和函数,可以方便地实现算法和数据操作。本

    2024年02月10日
    浏览(59)
  • 【如何从零基础小白开始学习C++详细介绍】

    如果你想从零基础开始学习C++并最终成为一个“大佬”级别的专家,你需要遵循一个阶段性的学习计划,并且不断练习和深入研究,下面是学习方向的学习阶段 学习编程基础 了解编程的基本概念,如变量、数据类型、运算符、控制结构(循环、条件判断)、函数等。 安装开

    2024年02月20日
    浏览(54)
  • C++ Webserver从零开始:基础知识(五)——信号

    Linux系统中,信号是一种通信的方式,其通常用作用户,系统或进程给 目标进程 发送的信息。 信号的作用:通知 目标进程 某个状态的改变或系统异常。 产生的条件: 对于终端程序:可以是用户输入的特殊的终端字符,比如ctrl+c是中断信号 系统异常,如浮点异常或非法内存

    2024年01月23日
    浏览(43)
  • 从零开始学习go开发

    1.Go 语言的特点和优势 Go 语言是一门相对年轻的编程语言,它具有以下特点和优势: 并发编程能力:Go 语言天生支持并发编程,使用 goroutine 和 channel 可以轻松实现并发操作,让编程更加高效。 高效的内存管理:Go 语言使用垃圾回收机制进行内存管理,省去了手动管理内存的

    2024年02月15日
    浏览(70)
  • 从零开始的c语言日记day36——指针进阶

    一、什么是指针: 指针的概念:1.指针就是个变量,用来存放地址,地址唯一标识一块内存空间。 ⒉指针的大小是固定的4/8个字节(32位平台/64位平台)。 指针是有类型,指针的类型决定了指针的+-整数的步长,指针解引用操作的时候的权限。4.指针的运算。 字符指针 用字符指针

    2024年02月05日
    浏览(36)
  • 从零开始,探索C语言中的字符串

    大家好,我是努力学习游泳的鱼。你已经学会了如何使用变量和常量,也知道了字符的概念。但是你可能还不了解由字符构成的字符串,这篇文章将带你一探究竟。 2.1 字符 单引号引起来的一个字符,用来初始化 char 类型的变量。 2.2 字符数组 字符数组可以存储很多字符,格

    2024年02月10日
    浏览(40)
  • C++从零开始的打怪升级之路(day12)

    这是关于一个普通双非本科大一学生的C++的学习记录贴 在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料 那么开启正题 今天学习了关于模板的知识,下面展开分析 首先我们思考一个问题,如何是实现一个通用

    2024年01月22日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包