1 声明式:所谓声明式是告诉编译器某个东西的名称和类型,但忽略细节。下面都是声明式:

extern int x;                 //对象(object)声明式 记住:变量的声明加extern关键字
std::size_t numDigits(int numbers); //函数(function)声明式
class Widget; //类(class)声明式
template<typename T> //模板(template)声明式
class GraphNode;

每个函数的声明揭示其签名式,也就是参数和返回类型。一个函数的签名等同于该函数的类型。numDigits函数的签名是std::size_t (int),也就是说“这函数获得一个int并返回一个std::size_t".

2 定义式:定义式的任务是提供编译器一些声明式所遗漏的细节。对对象而言,定义式是编译器为此对象拨发内存的地点。对function或function template而言,定义式提供了代码本体。对class或class template而言,定义式列出它们的成员。

3 初始化是“给予对象初值”的过程。对用户自定义类型的对象而言,初始化由构造函数执行。所谓default构造函数是一个可被调用而不带任何实参者。这样的构造函数要不没有参数,要不就是每个参数都有缺省值。

如果构造函数被声明为explicit,这可阻止它们被用来执行隐式类型转换,但它们仍可被用来进行显示类型转换。

void doSomething(B bObject); //函数,接受一个类型为B的对象
B bObj1; //一个类型为B的对象
doSomething(bObj1); //没问题,传递一个B给doSomething 函数
B bObj2();
doSomething(); //错误,DoSomething应该接受一个B而不是一个int,而int和B之间并没有隐式转换
doSomething(B()); //没问题,使用B的构造函数将int显式转换

被声明为explicit的构造函数通常比其non-explicit兄弟更受欢迎,因为它们禁止编译器执行非预期(往往也不被期望)的类型转换。

4 copy构造函数被用来“以同类型对象初始化自我对象”,copy assignment操作符被用来“从另一个同型对象中拷贝其值到自我对象”;

class Widget{
public:
Widget(); //default构造函数
Widget(const Widget &rhs); //copy构造函数
Widget& operator=(const Widget& rhs); //copy assignment 操作符
}; Widget w1; //调用default构造函数
Widget w2(w1); //调用copy构造函数
w1=w2; //调用copy assignment操作符

当你看到赋值符号时请小心,因为“=”语法也可以用来调用copy构造函数:

Widget w3=w2;  //调用copy构造函数

幸运的是“copy构造”和容易和“copy赋值”有所区别。如果一个新对象被定义(例如以上语句中的w3),一定会有个构造函数被调用,不可能调用赋值操作。如果没有新对象被定义(例如前述的“w1=w2”语句),就不会有构造函数被调用,那么当然就是赋值操作被调用。

copy构造函数是一个尤其重要的函数,因为它定义了一个对象如何passed by value(以值传递)。如果进行pass-by-reference-to-const(传引用),往往不需要调用copy构造函数。

C++中的术语的更多相关文章

  1. Oracle EBS Web ADI 中的术语

    Oracle EBS Web ADI 中的术语 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 异步调用异步调用是这样子的,和引入接口表中的数 ...

  2. GA中的术语及经常分析的指标

    GA中的术语 跳出客流:只浏览了网站的一个页面,并且没有进一步动作的访客目标转化:通常缩写为目标或转化,这是网站上面的一个预期或动作,通常被认为比标准网页更有价值,例如:"确认购买" ...

  3. kafka 中的术语

    出处:https://tech.meituan.com/2015/01/13/kafka-fs-design-theory.html table th:first-of-type { width: 7 ...

  4. YARN/MRv2 中基本术语介绍

    YARN/MRv2是下一代MapReduce框架(见Hadoop-0.23.0),该框架完全不同于当前的MapReduce框架,它在扩展性,容错性和通用性等方面更出色,据统计,Yarn有超过15000 ...

  5. javscript 中的术语和俚语

    语言中俚语和方言.在JavaScript中也有一些俚语或者说是术语,看似奇淫巧技,还是有一些用处,有三种语言组件可以来构造术语:强转.逻辑运算符和位变换. 1.强转:在javascript和大部分的语 ...

  6. C语言中一些术语的梳理_持续更新

    关键字.标识符.宏.预定义.预处理.编译.替换.预处理指令. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 标识符: ...

  7. 程序开发中的术语,如IDE,OOP等等

    我们在开发程序过程中,会用到一些与编译有关的术语,比如:[编辑器.编译器.调试器.连接器,链接器.解释器,集成开发环境(Integrated Development Environment,IDE). ...

  8. 游戏贴图中常用术语《DC》的理解

    什么是DC呢? 在GDI中,DC(Device Context)是一个非常重要的概念. 有的书中,将DC翻译为设备描述表,也有的书中翻译为设备上下文. 但是这些翻译,无法在我们的头脑里有强烈的冲击,无 ...

  9. C# 基础中有关术语理解

    一.栈vs堆  深入理解堆栈.堆在内存中的实现 二.Socket 深入探析c# Socket 三.多线程 c# 多线程 --Mutex(互斥锁)

随机推荐

  1. ServletContext全局变量初始化

    Java部分 package com.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.ser ...

  2. log4j详细配置说明

    log4j配置祥解 第一步:加入log4j-1.2.8.jar到lib下.第二步:在CLASSPATH下建立log4j.properties.内容如下:1 log4j.rootCategory=INF ...

  3. 关于CMD命令行两三事

    1.返回盘符:

  4. Spire.XLS

    又一款Excel处理神器Spire.XLS,你值得拥有(二)   前言:上篇 C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有 介绍了下组件的两个功能,说不上特色,但确实能解决我 ...

  5. nodejs广播

    http://site.douban.com/185124/widget/notes/10805558/note/240909343/ http://t42dw.iteye.com/blog/1767 ...

  6. 手动删除文件夹exe病毒并恢复原来文件夹

    转自手动删除文件夹exe病毒并恢复原来文件夹 经常使用U盘.MP3.MP4等移动硬盘的大家,有时是不是会发现,移动硬盘里有现了exe文件,原来本来有一个文件夹的名字是 音乐 ,但后来发现 音乐 这个文 ...

  7. 截断WM_SYSCOMMAND的SC_CLOSE命令(VC与Delphi双版本)

    WM_SYSCOMMAND - 系统命令消息,当点击最大化按钮,最小化按钮,关闭按钮等.都会收到这个消息.常用于窗口关闭时提示用户处理.WPARAM - 具体的命令,例如 关闭 SC_CLOSELPA ...

  8. SQL server 连接查询

    1.join on     左右拼接查询 2.union 上下拼接    注意:所拼接的列的数据类型要一致

  9. Microsoft JScript 运行时错误: Automation 服务器不能创建对象

           var WshShell = new ActiveXObject('WScript.Shell')         WshShell.SendKeys( '{F11}');   问题: ...

  10. HDOJ(HDU) 2524 矩形A + B(推导公式、)

    Problem Description 给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形,下图为高为2,宽为4的网格. Input 第一行输入一个t, 表示有t组数据,然后每行输入n,m ...