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;我要求您应该从…

MyEclipse for Windows快捷键

文章目录编辑查询/替换导航调试重构其他自定义快捷键技巧编辑 快捷键功能说明Ctrl1快速修复&#xff08;最经典的快捷键,就不用多说了&#xff0c;可以解决很多问题&#xff0c;比如import类、try catch包围等&#xff09;CtrlShiftF格式化代码。团队有统一的代码格式&#xf…

微信小程序view动态长度_微信小程序实现动态获取元素宽高的方法分析

本文实例讲述了微信小程序实现动态获取元素宽高的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;我以前一直以为微信小程序不能动态获取view元素的宽高。但是自从看到&#xff1a; wx.createSelectorQuery() 这个api接口&#xff0c;以前的某些问题就能得到解决了…

数据结构【双指针算法】

双指针一般应用于维护两个队列&#xff0c;或者同一队列。 常见写法如下 for (int i 0, j 0; i < n; i){while (j < i && check(i, j)) j;//每道题的具体逻辑} 双指针的核心思想是把如下O(n^2)的算法优化位O(n) for (int i 0; i < n; i){for (int j 0; …

antlr 语言 库_关于ANTLR的通用库的需求:使用反射来构建元模型

antlr 语言 库我是一名语言工程师&#xff1a;我使用多种工具来定义和处理语言。 在其他工具中&#xff0c;我使用ANTLR&#xff1a;它简单&#xff0c;灵活&#xff0c;可以围绕它进行构建。 但是我发现自己围绕ANTLR为不同的项目重建了类似的工具。 我看到两个问题&#xff…

Windows 如何通过命令启动和关闭 Tomcat

首先你的系统要安装tomcat&#xff0c;至于如何安装tomcat这里就不讲解了&#xff0c;接着你打开windows的DOS命令终端&#xff08;winR打开运行窗口&#xff0c;输入cmd即可&#xff09;&#xff0c;然后通过DOS命令切换到tomcat安装目录下的bin目录&#xff0c;最后执行start…

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

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

Java的访问控制修饰符_访问权限修饰符_访问权限修饰词

public > protected > (default) > private 1.public 修饰的&#xff0c;在任何地方都可以访问 2.protected 修饰的&#xff0c;在类内部、同一个包、子类中能访问 3.default 表示在本类中、同一个包中能访问&#xff0c;但是在代码中不可以直接写 default&#xff0…

red hat安装宝塔_只需几分钟即可安装Red Hat Container Development Kit(视频)

red hat安装宝塔自从我开始使用各种形式的OpenShift&#xff08;例如带盒的Online&#xff0c;然后又作为容器化的图像&#xff09;玩耍以来&#xff0c;没有什么比Red Hat Container Development Kit&#xff08;CDK&#xff09;的可用性令我兴奋。 该套件使您可以轻松地访问…

基于RTP的QOS算法简介

服务质量QoS&#xff08;Quality of Service&#xff09;用于评估服务方满足客户服务需求的能力。通过配置QoS&#xff0c;对企业的网络流量进行调控&#xff0c;避免并管理网络拥塞&#xff0c;减少报文的丢失率&#xff0c;同时也可以为企业用户提供专用带宽或者为不同的业务…

es修改type名称_ElasticSearch如何修改索引字段

一、需求 当es字段类型无法支撑业务需求,需要修改到字段类型的时候。例如修改字段类型从Integer变成double,这种情况下,是没办法修改es的字段的type的。 原因是一个字段的类型进行修改之后,ES会重新建立对这个字段的索引信息,ElasticsSearch的底层是Lucene库,字段类型修改…

MyEclipse for Windows 关于 java、jsp、xml、js、html 等文件的注释快捷键及注释格式介绍

文章目录java 的注释单行注释多行注释文本注释jsp 的注释第一种第二种第三种css 的注释js 的注释单行注释奇葩的单行注释多行注释文档注释xml 的注释html 的注释java 的注释 单行注释 public class HelloWorld{public static void main(String [] args){System.out.println(&…

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…

软件项目的命名规范/命名规则

文章目录项目名称目录名称包命名虚拟目录资源路径Java 代码命名属性文件 properties 命名xml文件命名jsp文件命名html文件命名js文件命名css文件命名图片文件命名数据库命名html标签的属性值命名规则项目名称 使用小串式命名法 项目名称使用英文&#xff0c;全部字母小写&…

数据结构【高精度专题】

// 高精度加法 // C A B, A > 0, B > 0 vector<int> add(vector<int> &A, vector<int> &B) {if (A.size() < B.size()) return add(B, A);vector<int> C;int t 0;for (int i 0; i < A.size(); i ){t A[i];if (i < B.size…

react java_独眼巨人React组织了Java 8库的寒武纪爆发

react java什么是独眼巨人React&#xff1f; Lambda表达式和默认方法在Java 8中的到来预示了Java语言十年来最大的结构性变化。 在此基础上构建了一些新的很酷的API&#xff0c;例如Stream, Optional, CompletableFuture最终Java开发人员可以以更实用的样式进行编码。 尽管这是…

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

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

MyEclipse的build、clean、publish、clean(redeploy)的区别

文章目录buildcleanpublishclean(redeploy)新增了java文件或者修改了已有的java文件删除了java文件或者包修改了classes目录以外的文件build 就是将工程src目录的内容全新输出到工程的classes目录下&#xff0c;全面覆盖旧的文件&#xff0c;需要编译的会编译后再输出 clean …