文档章节

关于C++中的类

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

(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
0
FFLIB之FFLUA——C++嵌入Lua&扩展Lua利器

摘要: 在使用C++做服务器开发中,经常会使用到脚本技术,Lua是最优秀的嵌入式脚本之一。Lua的轻量、小巧、概念之简单,都使他变得越来越受欢迎。本人也使用过python做嵌入式脚本,二者各有特...

知然
2013/01/27
0
0
C++11 中值得关注的几大变化

源文章来自前C++标准委员会的 Danny Kalev 的 The Biggest Changes in C++11 (and Why You Should Care),赖勇浩做了一个中文翻译在这里。所以,我就不翻译了,我在这里仅对文中提到的这些变...

雅各宾
2014/01/17
0
0
嵌入式开发之C++基础学习笔记1--综合比较HelloWorld示例

选择C++的理由: 1)C++语言是由C语言扩充而来。它是一门混合型的语言,既支持传统的结构化程序设计,又支持面向对象的程序设计,这使得C++非常流行。它在编程中支持面向对象。因此,它比C更...

吴锦涛
2012/12/16
0
1
STL,ATL,WTL的联系与区别

STL,ATL,WTL的联系与区别 STL 即 Standard Template Library STL(标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时...

IMGTN
2012/06/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周三乱弹 —— 你是靠自己努力才失败的

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 小小编辑:推荐歌曲 《Raveena》- Raveena 《Raveena》- Raveena 手机党少年们想听歌,请使劲儿戳(这里) 11月18日,俞敏洪在某论坛演讲中称...

小小编辑
32分钟前
43
6
firewalld

1. firewalld 是什么 CentOS中默认是有 firewalld, iptables, etablesd firewalld 是 CentOS7/RadHat7 中默认的防火墙管理工具. firewalld 工具用来管理里netfilter, 不过底层还是调用的还是...

Fc丶
49分钟前
2
0
Java 源代码和 C 源代码的运行区别

与其他程序的执行方式和编译方式不同。 Java 源代码需要进行编译成字节码后在 Java 虚拟机上运行,这样 Java 程序能够保持独立性和跨平台功特性。 请参考下图。 https://www.cwiki.us/pages...

honeymose
今天
5
0
Apache限定目录解析PHP,限制user_agent,PHP相关的配置

Apache限定目录解析PHP 配置前访问upload/index.php [root@test-a ~]# curl -x192.168.77.139:80 'www.test.com/upload/index.php'This is upload diretory 配置,/usr/local/apache2.4/......

野雪球
今天
5
0
java.util.Concurrent.Exchanger源码

类图 源码: package java.util.concurrent;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.AtomicReference;import java.util.concurrent......

狼王黄师傅
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部