C++ 11 深度学习(十四)C++类

(一)综述:类是我们自己定义的数据类型

设计时要考虑的角度:

  1. 站在设计和实现的角度来考虑;
  2. 站在使用者的角度考虑;
  3. 父类,子类之间的考虑;

(二)explicit

首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).

(三) inline const mutable this static

在类定义中实现成员函数inline

class pro
{
public://类内inlineint GetNum(){return num1 + num2;}
private:int num1;int num2;
};

(四)成员函数末尾加const,告诉系统这个成员函数不会修改对象里任何成员变量的值等

const 定义的类对象只能调用const结尾的成员函数;末尾const成员函数,可以被const对象和非const成员调用

#include<iostream>
using namespace std;class A
{
public:void init(int num){a = num;}
protected:int a;};int main()
{const A aa;aa.init(100);
}

(五)mutable

使用mutable修饰的内容,永远处于可被修改的状态。

class A
{
public:void init(int num)const {a = num;}
protected:mutable int a;};

(六)返回自身对象的引用,this

class A
{
public:A& init(int num){this->a = num;return *this;}
protected:int a;};

编译器负责把这个对象的地址(&class)传递给成员函数中一个隐藏的this形参;在系统角度看来,任何对类成员直接访问都被看作成为是通过this做隐式调用的。

  1. this指针只能在成员函数中使用,全局函数,静态函数都不能使用this指针。
  2. 在普通成员函数中,this是一个指向非const对象的const指针 (class * const this)。
  3. 在const成员函数中,this是一个指向const对象的const指针 (const class *  const this)。

(七)static成员

class A
{
public:A() {};~A() {};static int num ;//只声明了,但是没有分配内存static int getnum(){return num;}};
int A::num = 0;//分配内存并且类外初始化int main()
{A aa;aa.num = 100;cout << A::num << endl;cout << A::getnum() << endl;}
  1. 静态成员变量在类内声明的时候不能进行初始化操作,且没有分配内存。需要在类外进行分配内存并且初始化。
  2. 静态成员变量和静态成员函数可以通过类对象调用,也可以通过类名::(静态成员函数/静态成员)的方式调用。

static的特点:(可以修饰成员变量和成员方法)

         1.随着类的加载而加载。

         2.优先于对象存在。

         3.被类的所有对象共享。(判断是否用static修饰,只需要看其是否被所有对象共享)

         4.可以用对象名调用也可以直接通过类名调用。

         5.static修饰的内容与类相关称之为类变量,非静态修饰的内容称之为实例变量。

static使用注意事项:

        1.静态方法中没有this关键字。(静态修饰的内容是随着类的加载而加载,this随着对象的创建而存在,静态修饰的内容比对象先存在)。

        2.静态方法只能访问静态的成员变量和静态的成员方法

                  静态方法:

                       成员变量:只能访问静态变量。

                       成员方法:只能访问静态成员方法。

                 非静态方法:

                        成员变量:即可以访问静态变量又可以访问非静态变量。

                        成员方法:既可以访问静态的方法又可以访问非静态的成员方法。

         静态只能访问静态,非静态可以访问一切。

静态变量和成员变量的区别:

          1.所属不同:

                 静态变量:属于类,类变量。

                 成员变量:属于对象,实例变量

         2.存储位置不同

                 静态变量:方法区的静态区。

                 成员变量:堆内存。

        3.生命周期不同

                静态变量:随着类的加载而加载,随着类的消失而消失。

                成员变量:随着对象的创建而存在,随着对象的消失而消失。

       4.调用方式不同

                静态变量:可以通过对象名调用也可以直接通过类名调用。

                成员变量:只能通过对象名调用。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手动编译 lombok_Lombok,一种编译时Java注释预处理器,可最大程度地减少代码大小...

手动编译 lombok在本文中&#xff0c;我们将看到如何在常规Java代码中使用lombok来最大程度地减少代码长度和冗余。 什么是Lombok&#xff1f; Lombok&#xff0c;一个编译时注释预处理器&#xff0c;有助于在编译时注入一些代码。 在详细介绍之前&#xff0c;我要求您应该从…

mysql超大表处理方式是_第29问:MySQL 的复制心跳说它不想跳了

问题最近年底&#xff0c;大家的数据库经常跑批量大事务&#xff0c;会发现复制突然断开&#xff0c;报错“心跳与本地信息不兼容”&#xff1a;会是什么原因&#xff1f;实验我们先来复现一下&#xff0c;再进行分析。宽油&#xff0c;做一对主从数据库&#xff1a;我们先造一…

sap 分摊分配不产生会计凭证的原因_SAP软件的物料分类账功能

物料账介绍物料分类账(Material Ledger)是SAP财务模块的重要功能之一&#xff0c;用于对标准价计价的物料进行差异处理。激活ML后&#xff0c;系统会在"工厂物料"层(或更细的层次)为每个物料建立子账簿&#xff0c;记录该物料在各个期间的数量、价值变化情况。月底运…

忽略异常_忽略已检查的异常,所有出色的开发人员都在这样做–基于600,000个Java项目...

忽略异常Github和Sourceforge上超过600,000个Java项目中的异常处理概述 Java是使用检查异常的少数几种语言之一。 它们在编译时强制执行&#xff0c;并且需要某种处理。 但是……在实践中会发生什么&#xff1f; 大多数开发人员实际上会处理任何事情吗&#xff1f; 他们怎么做…

数据结构【队列专题】

先进先出&#xff08;First In First Out&#xff0c;FIFO&#xff09;的线性序列&#xff0c;成为“队列”。 队列也是一种线性表&#xff0c;只不过它是操作受限的线性表&#xff0c;只能在两端操作&#xff1a; 一端进&#xff0c;一端出。进的一端成为队尾&#xff08;re…

oracle安装卡在create inventory_滴滴云服务器上安装Oracle12cR2单实例数据库

一、相关说明Oracle数据库是由美国甲骨文公司推出的一款优秀的关系型数据库。当前最新版为Database 19c。本文简述Oracle Database 12cR2在滴滴云主机上的安装过程。如需更权威的指导方法请参考Oracle官方安装文档。二、环境概述一台DC2云主机&#xff08;2c4g&#xff09;一个…

【WebRTC---序篇】(二)Windows平台WebRTC源码编译

需要准备的东西 (一)一个强大的梯子(懂得都懂)!!!!!!!!! (二) 下载depot_tools Windows指定地址必须在此下载 打开这个页面,找 install depot_tools 这个关键字 请把他解压到C盘,并且设置到PATH环境变量种,且让它处于最顶端。 其他需要设置的额外变量 DEPOT_TOOLS_…

商品管理后台发布商品时,规格值组合的前端交互的实现逻辑

方案1&#xff1a;先计算总行数&#xff0c;再循环填充规格值 根据每种规格值数量计算得到总行数&#xff0c;如果下图有3种规格&#xff1a;长度、重量、大小&#xff0c;规格值个数分别为&#xff1a;3、3、2,3x3x218行。 规格种类有3种&#xff0c;于是写3层嵌套递归循环填…

【WebRTC---源码篇】(五)WebRTC视频引擎

1. 视频数据的采集时间 2.视频分发器VideoBroadCaster

activiti异步执行_对基于消息队列的Activiti异步执行器进行基准测试

activiti异步执行一点历史 永无休止的一件事是&#xff0c;Activiti在某些非常大的规模的大型组织中的使用方式。 过去&#xff0c;这导致了各种优化和重构&#xff0c;其中包括异步执行器-替换旧的作业执行器。 对于未启动的用户&#xff1a;这些执行器在流程实例中处理计时器…

chrome浏览器设置网页快速到顶部和到底部的方法

鼠标移到浏览器的书签任意位置&#xff0c;点击鼠标右键添加书签&#xff0c;在添加书签的窗口输入名称和js代码&#xff0c;然后把书签移到浏览器书签栏的最左侧&#xff0c;这样每次浏览网页就可以使用快捷方式快速到底部或者顶部了。 快速到顶部的js代码&#xff1a;javascr…

apache pdfbox_Apache PDFBox命令行工具:无需Java编码

apache pdfbox在博客文章Apache PDFBox 2中 &#xff0c;我演示了将Apache PDFBox 2用作从Java代码中调用的库来操作PDF。 事实证明&#xff0c;Apache PDFBox 2还提供了可以直接从命令行直接使用的命令行工具 &#xff0c;而无需其他Java编码。 有几种命令行工具可用&#xff…

【WebRTC---源码篇】(六)NACK判断包位置的关键算法

首先保证a与b不相等 template <typename T, T M = 0> inline bool AheadOf(T a, T b) {static_assert(std::is_unsigned<T>::value,"Type must be an unsigned integer.");return a != b && AheadOrAt<T, M>(a, b); } template <type…

spring集成mq_使用Spring Integration Java DSL与Rabbit MQ集成

spring集成mq我最近参加了在拉斯维加斯举行的2016年Spring大会 &#xff0c;很幸运地看到了我在软件世界中长期敬佩的一些人。 我亲自遇到了其中的两个人&#xff0c;他们实际上合并了几年前我与Spring Integration相关的一些次要贡献– Gary Russel和Artem Bilan &#xff0c;…

MyEclipse 如何使用断点调试

文章目录1、在需要的代码行处打断点右键添加断点双击添加断点快捷键添加断点2、以debug模式开启服务器通过debug执行列表&#xff0c;选择服务器启动当前程序按右键&#xff0c;选择debug as&#xff0c;再选择服务器启动开发视图底部server列表选择服务器开启debug视图&#x…

【WebRTC---源码篇】(八)音频数据采集

ADM的创建 1.Audio Device Module是在逻辑层与硬件设备层之间进行了转换,需要使用什么功能,调用什么接口就可以,不要管底层平台实现。 2.AudioDeviceModule是一个接口类,定义了一系列接口。最终实现由子类AudioDeviceModuleForTest实现,其中包括一些测试函数(对设备的…

jsf netbeans_NetBeans Java EE技巧9:从数据库创建JSF应用程序

jsf netbeans您需要非常快速地创建数据库前端吗&#xff1f; NetBeans IDE允许人们以很少的代码就为一组数据库表开发JSF应用程序前端。 现在&#xff0c;本教程是一个老歌&#xff0c;但是一个好东西……对于那些不了解它的人来说&#xff0c;值得再次提及。 首先&#xff0c…

cloud foundry_介绍“又一个” Cloud Foundry Gradle插件

cloud foundry在与两个同事&#xff08;感谢Mark Alston和Dave Malone &#xff01;&#xff09;一起使用自动Jenkins管道部署Cloud Foundry应用程序的过程中&#xff0c;我决定尝试编写Gradle插件来执行一些通常需要完成的任务使用命令行Cloud Foundry Client完成 。 引入一个…

Oracle/MySQL/Java数据类型对应表

文章目录数据类型对照表MySQL 的 int、bigint、mediumint、smallint、tinyint 的对比关于 MySQL 整型显示位数的问题关于 MySQL 的 timestamp关于 JDBC 类型数据类型对照表 MysqlOracleJavaBIGINTNUMBER(19,0)java.lang.LongBITRAWbyte[]BLOBBLOB RAWbyte[]CHARCHARjava.lang.…

java10个基础错误_我们处理了10亿个Java记录的错误-这是导致97%的错误的原因

java10个基础错误97&#xff05;的记录错误是由10个唯一错误引起的 在2016年&#xff0c;一件事在30年内没有改变。 开发和运营团队仍依靠日志文件对应用程序问题进行故障排除。 由于某些未知原因&#xff0c;我们隐式信任日志文件&#xff0c;因为我们认为事实隐藏在其中。 如…