文档章节

关于C++中的类

最新更新消息
 最新更新消息
发布于 2015/10/14 13:30
字数 1125
阅读 49
收藏 1
点赞 0
评论 0

(1)对于const成员函数,从const关键字必须同时出现在声明和定义处,若只出现在一处,就会出现编译时错误。

(2)struct关键字和class关键字的区别就是在于默认访问标号不同。如果类是struct关键字定义的,则在第一个访问标号之前的成员是公有的;如果类是class关键字定义的,则这些成员是私有的。

(3)类的定义以分号结束。分号是必需的,因为在类定义之后可以接一个对象定义列表。

(4)成员函数具有一个附加的隐含参数,即指向该类对象的一个指针,这个隐含指针命名为this,与调用成员函数的对象绑定在一起。

(5)在普通的非const成员函数中,this的类型是一个指向类类型的const指针,可以改变this所指向的值,但是不能改变this保存的地址;在const成员函数中,this

类型是一个指向const类类型的对象的const指针,即不能改变this指向的值,也不能改变this指针保存的地址。

不能从const成员函数中返回指向类对象的普通引用,const成员函数只能返回*this作为一个const引用。

基于成员函数是否为const,可以重载一个成员函数。

(6)可变数据成员:mutable。永远不能为const,甚至当它是const对象的成员时也是如此。const成员函数可以改变mutable成员。

(7)const构造函数是不必要的,创建一个类类型的const对象时,运行一个普通的构造函数来初始化该const对象。

(8)构造函数初始化列表只在构造函数的定义中而不是在声明中定义。执行构造函数分为两个阶段:初始化阶段、普通计算阶段(由构造函数体内的所有语句组成)。


(9)有些成员必须在构造函数初始化列表中进行初始化,对于这样的成员,在构造函数体中对它们赋值不起作用。没有默认构造函数的类类型的任何成员,以及const或引用类型成员,不管是哪种类型,都必须在构造函数初始化列表中进行初始化。

(10)在构造函数初始化列表中,成员初始化的顺序就是在类中定义成员的次序。所以,需要注意成员初始化列表中各数据成员的次序,按照与成员声明一致的次序编写构造函数初始化列表是个好注意。

(11)一个类哪怕只定义了一个构造函数,编译器也不会再生成默认构造函数了。只有当一个类没有定义构造函数时,编译器才会自动生成一个默认构造函数。

(12)explicit关键字只能用于类内部的构造函数的声明上,在类的定义体外部所做的定义不再重复它。作用是抑制由单个形参构造函数定义的隐式转换。

(13)友元:允许访问类的非公有成员,同时仍然阻止一般的访问。

(14)static成员是与类相关联的,并不与该类的对象相关联。

static成员函数不能被声明为const,也不能并声明为虚函数。static成员函数没有this指针,它可以直接访问该类的static成员,但不能直接使用非static成员。static关键字出现在类定义体中函数的声明处,外部定义不出现)。

static数据成员必须在类定义体的外部定义,且只能定义一次。不能再类定义体的内部进行初始化。

const static数据成员可以再类定义体内进行初始化,该数据成员仍必须在类定义体外进行定义,但定义时无需在指定初始值。

static数据成员的类型可以是该成员所属类的类型,非static成员被限定声明为其自身类对象的指针或引用。

static数据成员可以作为默认实参,非static数据成员不能用作默认实参,因为它的值不能独立于所属的对象而使用。


© 著作权归作者所有

共有 人打赏支持
最新更新消息
粉丝 1
博文 39
码字总数 49637
作品 0
崇明
Java程序员如何高效而优雅地入门C++

Java程序员如何高效而优雅地入门Cpp,由于工作需要,需要用C++写一些模块。关于C++ 的知识结构,虽说我有过快速学习很多新语言的经验,但对于C++ 我也算是老手,但也还需要心生敬畏,本文会从...

小欣妹妹 ⋅ 04/23 ⋅ 0

VS2010/MFC编程入门教程之目录和总结(鸡啄米)

鸡啄米的这套VS2010/MFC编程入门教程到此就全部完成了,虽然有些内容还未涉及到,但帮助大家进行VS2010/MFC的入门学习业已足够。以此教程的知识为基础,学习VS2010/MFC较为深入的内容已非难事...

weixin_40647819 ⋅ 05/23 ⋅ 0

C语言/C++编程学习未来之路

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 03/30 ⋅ 0

Objective-C 中类的数据结构

一、类的结构 OC 中的代码在底层实现,使用的是 C、C++,所以要研究 OC 中的类结构,可以将 OC 的代码转成 C++的代码即可。首先看一下 NSObject 的结构是什么样子的,创建一个文件并简单的编...

CoderHG ⋅ 04/22 ⋅ 0

SWIG与JAVA 交互最全开发指南一

项目背景 最近开始研究做移动端项目,但是本人基本是做了五六年的c++的底层研发,对C++的研发可以说是驾轻就熟了,但是对于android还是属于刚入门阶段,虽然断断续续做移动端也做了一年,但是...

揽月凡尘 ⋅ 前天 ⋅ 0

C++ STL学习——vector

学过C++的人肯定会很熟悉STL标准模板库,STL其实就是封装了一系列的接口,供我们调用。很多函数或者算法的实现不需要我们从头开始写,大大提高我们的编程效率。这篇博客在简单介绍STL的情况下...

chenyufeng1991 ⋅ 2016/08/21 ⋅ 0

什么是 C 和 C ++ 标准库?

简要介绍编写C/C ++应用程序的领域,标准库的作用以及它是如何在各种操作系统中实现的。 我已经接触C++一段时间了,一开始就让我感到疑惑的是其内部结构:我所使用的内核函数和类从何而来? ...

oschina ⋅ 04/10 ⋅ 0

大神有话说之c++,还在迷茫的朋友可以来看一下

C++ 是一种中级语言,它是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言。C++ 可运行于多种平台上,如 Window...

悟空_b201 ⋅ 05/30 ⋅ 0

比特币源码研读之二C++预备知识

本文由【区块链研习社】优质内容计划支持,更多关于区块链的深度好文,请点击【区块链研习社】 本文作者:区块链研习比特币源码研读班 韬声依旧在路上 在正式为大家分享比特币源码研读之前,...

韬声依旧在路上 ⋅ 05/07 ⋅ 0

C++雾中风景6:拷贝构造函数与赋值函数

在进行C++类编写的过程之中,通常会涉及到类的拷贝构造函数与类的赋值函数。初涉类编写的代码,对于两类函数的用法一直是挺让人困惑的内容。这篇文章我们会详细来梳理拷贝构造函数与赋值函数...

LeeHappen ⋅ 01/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

BS与CS的联系与区别【简】

C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、InFORMix或 SQL Server。客户端需要安装专用的客户端软件。 B/S是Brower/...

anlve ⋅ 49分钟前 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 今天 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部