高质量程序设计指南c++/c语言(35)--复制控制

摘要: 复制构造函数、赋值操作符和析构函数总称为复制控制(copy control),编译器会自动实现这些操作,但是类也可以定义自己的版本。通常,编译器合成的复制控制函数是非常精炼的--它们只做必须的工作。但对某些类而言,依赖于默认定义会导致灾难。实现复制控制操作最困难的部分,往往在于识别何时需要覆盖默认版本。有一种特别常见的情况需要类定义自己的复制控制函数,那就是类具有指针成员。1、复制构造函数string null_book = "66666"; //首先调用一个接受c风格字符串形参的string构造函数,创建一个临时对象,然后,编译器使用string复制构造函数将null_b 阅读全文
posted @ 2013-05-13 17:27 江在路上2 阅读(208) 评论(0) 推荐(0) 编辑

高质量程序设计指南c++/c语言(34)--多重继承

摘要: 多重继承的继承列表中,一个基类只能出现一次。先看一个例子:#include<iostream>using namespace std;class ZooAnimal{public: ZooAnimal() { cout << "ZooAnimal" << endl; } ZooAnimal(int data) { cout << "ZooAnimal(int data)" << endl; d1 = data; }private: int d1;};class Bear: public ZooA 阅读全文
posted @ 2013-05-13 13:15 江在路上2 阅读(243) 评论(0) 推荐(0) 编辑

高质量程序设计指南c++/c语言(33)--函数指针

摘要: 函数类型由其返回类型和形参表确定,而与函数名无关。// pf points to function returning bool that takes two const string referencesbool (*pf)(const string &, const string &);*pf两侧的括号是必须的// declares a function named pf that returns a bool *bool *pf(const string &, const string &);1、指向函数的指针的初始化和赋值在引用函数名但是又没有调用该函数 阅读全文
posted @ 2013-05-13 11:13 江在路上2 阅读(226) 评论(0) 推荐(0) 编辑

高质量程序设计指南c++/c语言(32)--函数重载

摘要: 出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为函数重载。任何程序都仅有一个main函数,main函数不能重载。函数重载和重复声明的区别,如果两个同名函数声明的返回类型和形参表完全相同,则将第二个函数声明视为第一个的重复声明,一个函数声明多次是合法的,如:void printValues(int i);void printValues(int i);如果两个函数的形参表完全相同,但返回类型不同,则第二个声明是错误的,如:void printValues(int i);int printValues(int i); 有些看起来不同的形参表本质上是相同的,如:// each p 阅读全文
posted @ 2013-05-13 10:23 江在路上2 阅读(191) 评论(0) 推荐(0) 编辑

高质量程序设计指南c++/c语言(31)--数组形参

摘要: 数组有两个特殊的性质,影响我们定义和使用作用在数组上的函数:一是不能复制数组,而是使用数组名字时,数组名会自动转化为指向其第一个元素的指针。因为数组不能复制,所以无法编写数组类型形参的函数。数组会自定转化为指针,所以处理数组的函数通常通过操纵指向数组中的元素的指针来处理数组。1、数组形参的定义void printValues(int *){}void printValues(int []){}void printValues(int [10]){}上面三个函数定义时完全等价的,形参类型都是int *2、形参的长度会引起误解编译器忽略为任何数组形参指定的长度。#include<iostre 阅读全文
posted @ 2013-05-13 10:20 江在路上2 阅读(243) 评论(0) 推荐(0) 编辑

高质量程序设计指南c++/c语言(30)--引用

摘要: 引用就是对象的另一个名字,不能定义引用类型的引用。引用必须用与该引用同类型的对象初始化。const引用是指向const对象的引用。const int ival = 1024;const int &refVal = ival; //okint &ref2 = ival; //error严格的说,const引用指的是指向const对象的引用。const引用可以初始化为不同类型的对象或者右值,如字面常量:int i = 10;//legal for const references onlyconst int &r = 42;const int &r2 = r+i;同 阅读全文
posted @ 2013-05-13 10:15 江在路上2 阅读(264) 评论(0) 推荐(0) 编辑

高质量程序设计指南c++/c语言(29)--深度探索指针和数组

摘要: 转载:http://blog.csdn.net/shizhixin/article/details/7050592 int *a[2]; //sizeof(a):8 int (*b)[2]; //sizeof(b):4 int c[3]; //sizeof(c):12上面3个都了解吗?轻松加愉快地看下面这张图: cout << typeid(new float).name() << endl; //float *,它跟数组没有丁点关系 cout << typeid(&new float).name() << endl; //float * 阅读全文
posted @ 2013-05-02 14:08 江在路上2 阅读(261) 评论(0) 推荐(0) 编辑

高质量程序设计指南c++/c语言(28)--指针vs数组名

摘要: 1、转载:http://wenku.baidu.com/view/efd95e73a417866fb84a8eff.html数组是指针的基础,多数人就是从数组的学习开始指针的旅程的。下面我节选一些在各种论坛和文章里经常见到的关于数组的文字:“一维数组是一级指针”“二维数组是二级指针”“数组名可以作为指针使用”“数组名就是..........的常量指针”“数组名就是..........的指针常量”..................................这些文字看起来非常熟悉吧?类似的文字还有许多,或许你就是经常说这些话的人呢。不过非常遗憾,这些文字都是错误的,实际上数组名永远都不会是 阅读全文
posted @ 2013-05-02 13:14 江在路上2 阅读(205) 评论(0) 推荐(0) 编辑

高质量程序设计指南c++/c语言(27)--指针数组vs指向数组的指针

摘要: 一、数组指针(也称行指针),定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。 如要将二维数组赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][] 所以数组指针也称指向一维数组的指针,... 阅读全文
posted @ 2013-05-01 22:54 江在路上2 阅读(173) 评论(0) 推荐(0) 编辑

高质量程序设计指南c++/c语言(26)--默认参数

摘要: 1、 既可以在函数声明也可以在函数定义中指定默认实参,但是,在一个文件中,只能为一个形参指定默认实参一次。例如下面的程序会出现重复定义错误。int fun(int a=3,int b=5);int fun(int a=9,int b){ return a*b;}2、函数最终的默认参数是声明和定义的合集。下面这样也是可以的,只是不推荐。#include<iostream>using namespace std;int fun(int a,int b=5);int fun(int a=9,int b){ return a*b;}int main(void){ cout << 阅读全文
posted @ 2013-05-01 21:59 江在路上2 阅读(226) 评论(0) 推荐(0) 编辑