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.

随机推荐

  1. 返璞归真vc++之字符类型

    在今天,大量使用java与.net的程序员已经很少去真实了解字符的底层表达,但是使用VC++编程,对字符的处理却非常慎重,刚学习vc++肯定会为其中的字符类型给晕头转向,今天本人学习第一节,从字符开始 ...

  2. 《Linux系统静态路由和火墙路由》

    本篇主要写的是关于静态路由表的添加,和如何让你不能上网的主机通过火墙路由表实现上网的功能. 静态路由表: 要是你的主机是2块网卡,并且做了网卡的绑定,依照我下面的方法是成功不了的,你可以去编辑: # ...

  3. ubuntu bash提示找不到文件或目录

    我在ubuntu上安装好后交叉编译器,用tab键也可以找到这个交叉编译器,但执行的时候总是提示:bash:xxx找不到文件或目录. 解决方法:安装lib32z1 命令:apt-get install ...

  4. 实现textarea自适应的方法

    1.用div来模拟实现textarea自适应 <!doctype html> <html lang="en"> <head> <meta ...

  5. Android布局揭秘

    前言 今天把对于布局的一些理解写下来,主要内容包括控件的属性的继承关系,控件与容器的属性的关系,以及各种类的属性的使用. 控件的属性种类 通常意义上讲,我们在对一个控件进行属性赋值的时候大体上有种类型 ...

  6. Ubuntu 12.04 修改默认启动为字符界面

    sudo vim /etc/default/grub 修改GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 为:GRUB_CMDLINE_LINU ...

  7. 实现Server.UrlEncode和Server.UrlDecode功能的js代码

    <script> var EncodeURI = function(unzipStr,isCusEncode){    if(isCusEncode){        var zipArr ...

  8. java 环境变量设置

    JAVA_HOME  C:\Program Files\Java\jdk1.7.0 PATH %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; CLASSPATH .;%JAV ...

  9. php win主机下实现ISAPI_Rewrite伪静态

    有的win主机iss不支持 .htaccess 文件, 我在这里指的不是本地 在本地的话用apmserv服务器可以用.htaccess 文件,用apmserv服务器环境配置伪静态可以看 php 伪静态 ...

  10. 1. opencv的初体验

    http://guoming.me/opencv-config  这篇文章有讲解opencv的安装与配置 一些常用库 opencv_core249d.lib opencv_imgproc249d.li ...