1. No const constructor
Unlike other member functions, constructors may not be declared as const . When we create a const object of a class type, the object does not assume its “constness” until after the constructor completes the object’s initialization. Thus, constructors can write to const objects during their construction
2. Synthesized default constructor
The compiler-generated compiler is known as synthesized default constructor
For most classes, the synthesized default constructor initializes each data member as follows: if there is an in-class initializer, use it to initialize the member; otherwise, default initialize the member.
3.Why sometimes should difine default constructor for classes?
A reason to define default constructor is that for some classes, the synthesized default constructor does the wrong thing. The objects of built-in or compound type(such as array and pointer) that are defined inside a block have undefined value when they are default initialized. Therefore, classes that have members of built-in or compound type should either be initialized inside the class or define their own version of default constructor.
Another reason that some classes must define their own default constructor is that sometimes the compiler is unable to synthesize one. For example, if a class has a member of a class type, and that class doesn't have a default constructor , then the compiler can't initializer that member.
P.S. Classes that have members of built-in or compound type rely on synthesized default constructor only if all such members have in-class initializer.
4. Constructor initializer list
Constructor initializer list specifies initial values for one or more data members of the object being created.
5. Difference of default access level between class and struct
The default access specifier in strcut is public whereas that in class is private.
P.S. The only difference using class and using strcut to define a class is the default access level.
6. friend class or function
A class can allow other class or function to access its non-public members by making the class or function a friend.
P.S. Friend declaration should be inside a class definition and they may be anywhere in the class. Friends are not members of the class and aren't affected by the access specifier.
7. Benefits of encapsulation
1) User code can't inadvertently corrupt the state of an encapsyulated object
2) The user-level code doesn't need change when the implementation of can encapsulated class changes.
8. Friend class
The member functions of a friend class can access all the members, including non-public members of the class granting friendship.
P.S. Classes and non-member functions need not have been declared before they are used in a friend declaration.
9. What's name lookup?
Name lookup is the process of which declaration matches the use of a name.
10. Name lookup process
First look for a declaration of a name in the block where the name is used. Only name declared before is considered. Then if the name isn't found, look in the enclosing scope(s). If no declaration is found, then the program is in error.
11. Class definition are processed in two phases:
First, the member declarations are compiled. Function bodies are compiled only after the entire class has been seen.
12. Normal block-scope name lookup inside member functions
A name used in a body of member function is resolved as follows:
First, look for the declaration of the name inside the function body. As usual, only declarations in the part preceding the use of the name should be considered.
Then if no declaration is found inside the member function, look up declarations inside class. All the members of the class should be considered.
If no declaration is found inside the class, look for declarations in the scope that before the member function definition.
13. Constructor initializers are sometimes required(constructor initializer vs. assignment in constructor)
Members that are const or reference must be initialized. Similarly, members of a class type that doesn't have a default constructor must be initialized.
14. Order of member initialization
Members are initialized in the order that they appear in the class definition. The order in which the initializer appears in the constructor initializer list doesn't change the order of initialization.
P.S. It's a good idea write constructor initializer in the same order as the members are declared. Moreover, when possible, avoid using members to initialize other members.
15. Constructor and default arguments
A constructor that supplies default arguments for all its parameters also defines the default constructor.
16. Delegating constructor(C++11 feature)
A delegating constructor use another constructor from its class to perform its initialization.
17. We must initialize the static data member outside the class body.
18. Static data members vs. ordinary data members
1) Static data members can have incomplete data type. In particular, a static data member can have the same type as the class of which it is a member. A non-static member is restricted to a pointer or reference.
2) We can use a static member as a default argument.
随机推荐
-
数据结构与算法课程作业--1014. Translation
这道题思想很简单,就是用map将foreign的作为键值,english的值作为对应的映射值,然后通过直接用foreign作为map对象的下标直接查找. 本题比较烦人的一点就是输入数据,我使用了get ...
-
template_20_实现智能指针
一:计数器二:析构和释放三:SmartPoint
-
【风马一族_Java】使用java,画出任意大小的菱形
public class rhombic { public static void main(String[] args){ /** * scriber()画菱形的方法,参数 9 是指菱形的对角线的长 ...
-
解决grub引导错误的一次经历
我的电脑上一共是两块硬盘,1块固态硬盘(sda)装了win7,另外一块普通硬盘(sdb)装了ubuntu和centos两个系统,系统启动的引导是装在sdb上面的ubuntu的grub2,它负责选择不同 ...
-
预处理C#
1.什么是预处理 源代码指定了程序的定义.预处理(preprocessior directive)指令是指示编译器如何处理源代码.这里的预处理和C,C++里面的预处理是不一样的,在C,C++中有实际的 ...
-
dmp文件导入
dmp文件导入 1,打开“开始”-->输入cmd—> sqlplus log: 2,输入 conn / as sysdba管理员账户登录: 3,需要创建表空间,如果我们知道需要导入的数据库 ...
-
Silverlight动画的基本知识、关键帧动画
基础知识 (一)动画:是快速播放一系列图像(其中每个图像与下一个图像略微不同)给人造成的一种幻觉 (二)动画类型:两类 (1)From/To/By动画:在起始值和结束值之间进行动画处理. ...
-
laravel--has方法--查看关联关系
has()方法可以用来查询是否有关联关系的一个东西,一般其他的has方法 就是判断这个里面有没有值 $packageOrders = Company::has('packages')->get( ...
-
js中的数组Array定义与sort方法使用示例
Array的定义及sort方法使用示例 Array数组相当于java中的ArrayList 定义方法: 1:使用new Array(5 )创建数组 var ary = new Array(5): ...
-
openerp经典收藏 深入理解报表运行机制(转载)
深入理解报表运行机制 原文:http://blog.sina.com.cn/s/blog_57ded94e01014ppd.html 1) OpenERP报表的基本运行机制 OpenERP报表的 ...