1:在C++中,函数参数的传递方式主要有两种,即值传递和引用传递.值传递是指在函数调用时,将实际参数的值赋值一份传递到调用函数中,这样如果在调用函数中修改了参数的值,其改变将不会影响到实际参数的值.而引用传递则恰恰相反,如果函数按引用方式传递,那么在调用函数中修改了参数的值,其改变会影响到实际参数. 示例代码如下: // 5.18.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using na…
1:使用字面值(如1.3.15f.true),或者表达式等临时变量作为函数实参传递时,按左值引用传递参数会被编译器阻止.而进行值传递时,将产生一个和参数同等大小的副本.C++11提供了右值引用传递参数,不申请局部变量,也不会产生参数副本. // 5.20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namespace std; static float global = 1.11…
1:右值引用的定义: 类型 && i=被引用的对象: 左值与右值的区别在于,右值是临时变量,例如,函数的返回值,并且无法被改变. 当右值引用被初始化后,临时变量消失. 代码如下: // 5.17.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> int get() { ; return i; } int main() { ; // int &i = get()+4; //出…
1:如不加特殊说明,一般认为引用指的都是左值引用.引用实际上是一种隐式指针,它为对象建立一个别名,通过操作符&来实现,引用的形式如下: 数据类型 & 表达式: 例如: int a=10; int & ia=a; ia=2; 上面的程序定义了一个引用变量ia,它是变量名a的别名,对ia的操作与对a的操作完全一样.“ia=2”把2赋给a,“&ia”返回a的地址.执行“ia=2”和执行“a=2”等价. 使用引用的说明如下: (1)一个C++引用被初始化后,无法使用它再去引用另一个…
1:引用传递参数与指针传递参数能达到同样的目的.指针传递参数也属于一种值传递,其传递的是指针变量的副本.如果使用指针的引用,就可以达到在函数体内改变指针地址的目的.运行代码如下: // 5.19.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using std::cout; using std::endl; ;//静态全局变量 void getMax(int* &p)//指针的引用 {…
1:多态性是面向对象程序设计的一个重要特征,利用多态性可以设计和实现一个易于扩展的系统.在C++语言中,多态是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数,发出同样的消息被不同类型的对象接受时,将导致完全不同的行为.这里所说的消息主要是指类的成员函数的调用,而不同的行为是指不同的实现. 多态通过联编实现.联编是指一个计算机程序自身彼此关联的过程.按照联编说进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编.C++中,根据两边的时刻不同,有两种类型的多…
1:曾经介绍过string类型的数据,它是C++标准模版库提供的一个类.string类支持使用加号“+”连接两个string对象.但是使用两个string对象相减确实非法的,其中的原理就是C++所提供类中重载运算符的功能.在string类中定义了运算符“+”和“+=”两个符号的使用方法,这种使用方法的实质是一种成员函数. 关键字operator是专门实现类运算符重载的关键字.在类成员中,定义一个这样形式的函数: 返回值类型 operator 重载运算符(参数列表) 以box类为例,我们可以将加号…
1:在数组内容中我们了解到,数组是通过指针分配到的一段额定大小的内容.同样,数组也可以包含对象.声明对象数组的形式如下: box boxArray[5]; box boxArray2[2]={box(1,1,1),box(2,2,2)}; box boxArray3[3]={3,styleBox}; 值得注意的是,第一种申请对象数组的方法必须保证类中含有默认的够好函数,否则编译器将会报错.同样,可以通过对象指针申请动态数组.例如: box* box; pbox=new box[n];//n为整数…
1:当函数以相应的类作为形参列表时,对象可以作为函数的参数传入.在学习函数时,我们曾提过,值传递先复制实参产生副本.那么对象的副本是怎样的呢? 复制构造函数是指类的对象被复制时所调用的函数.下面两种情况中对象都会调用复制构造函数. (1)将一个对象赋值给另外一个对象时.例如: 对象1=对象2: 对象1(对象2): 上面的程序中对象2的复制构造函数会被调用. (2)作为值传递的实参.例如: function(对象1): 在function函数体内,使用的是对象1的副本.所以之前会调用对象1的复制构…
1:对于类的非静态成员,每个对象都有自己的一份拷贝,即每个对象都有自己的数据成员,不过成员函数却是每个对象共享的.那么调用共享的成员函数如何找到自己的数据成员呢?答案是通过类中隐藏的this指针. 2:示例代码: // 7.6.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namespace std; class CBook //定义一个CBook类 { public: int m…