References_2009_04_01

来源:互联网 发布:eduline源码 编辑:程序博客网 时间:2024/06/07 15:21
// References_2009_04_01.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
 //References(引用)
 // 1>就是对象的另一个名字;
 // 2>主要在程序中用作函数的形参---引用参数;
 // 3>是一种复合类型,通过在变量名前添加"&"符号来定义;
 //  1)复合类型是指其他类型定义的类型。        (不懂。。。。。。)
 // 4>在引用的情况下,每一种引用类型都"关联到"某一其他类型。   (不懂。。。。。。)
 // 5>不能定义引用类型的引用,但可以定义其他类型的引用。
 /* 6>引用是别名
 1)因为引用是它绑定对象的另一个名字,作用在引用上的所有操作事实上都是作用在该引用绑定的对象上;*/
 /* 7>定义多个引用
 1)可在一个类型定义行中定义多个引用。必须在每个引用标识符前加"&"符号:*/
 // 8>const 引用是指向const对象的引用
 //  1)
 // 9>const 引用可以初始化为不同类型的对象或者初始化右值
 //  引用必须用与该引用同 类型的对象初始化:        (不懂。。。。。。)
 //  1)就是说,给引用初始化的对象必须是同类型的才行。
 // eg:
 //int ival = 1024;
 //int &refVal = ival; // ok:refVal refers to ival
 //refVal += 2;  //  将refVal指向的对象ival加2
 //int ii = refVal; //把和ival相关联的值赋给ii.
 //std::cout << ival << std::endl;
 //std::cout << refVal << std::endl;
 //std::cout << ii << std::endl;
 /*从上可以看出,对引用的操作就是对其引用对象的操作。*/
 //int &refVal2;    // error:a reference must be initialized
 //int &refVal3 = 10;  //  error:initializer must be an object   (不懂。。。。。。)
 //refVal = 5;    
 //std::cout << ival << std::endl;
 //std::cout << refVal << std::endl;
 /*这一规则的结果是必须在定义引用时进行初始化。初始化是指明引用指向哪个对象的唯一方法。*/
 //-----> 7>
 //int i = 1024,i2 = 2048;
 //int &r = i, r2 = i2;  // r is a reference,r2 is an int
 //int i3 = 1024,&ri = i3;  // defines one object,and one reference
 //int &r3 = i3,&r4 =i2;  // defines two references
 //std::cout << i << "-----" << i2 << "-----" << r << "-----" << r2 << "-----" << i3 << "-----" << ri << "-----" << r3 << "-----" << r4 << "-----" << std::endl;
 //-----> 8>
 //const 引用
 //const int ival = 1024;
 //const int &refVal = ival;   // ok:both reference and object are const
 //int &ref2 = ival;     // error:non const reference to a const object  为阻止这样的修改,需要规定将普通的引用绑定到 const 对象是不合法的。
 //-----> 9>
 //int i = 42;//legal for const references only
 //const int &r = 42;
 //const int &r2 = r + i;
 //double dval = 3.14;
 //const int &ri = dval;
 //仅允许 const 引用绑定到需要临时使用的值完全避免了这个问题,因为 const 引用是只读的。
 //编译器会把这些代码转换成如下形式的编码:
 //int temp = dval;  // create temporary int from the double
 //const int &ri = temp; // bind ri to that temporary
 //下列哪些定义是非法的?为什么?如何改正?
 //int ival = 1.01;
 ////int &rval1 = 1.01; //必须被初始化的&rval1是对象。
 //int &rval2 = ival;
 //const int &rval3 = 1;
 ////在上题给出的定义下,下列哪些赋值是非法的?如果赋值合法,解释赋值的作用。
 //    rval2 = 3.14159; 
 // rval2 = rval3;
 //    ival = rval3;    
 //rval3 = ival;
 //(a) 中的定义和 (b) 中的赋值存在哪些不同?哪些是非法的?
 //int ival = 0;         
 //const int &ri = 0;  
 // ival = ri;
 //  ri = ival;
 //下列代码输出什么?
     int i, &ri = i;
     i = 5;
  ri =10;
     std::cout << i << " " << ri << std::endl;

 /******************************************
 引用要注意的几点:
 1).定义引用时候必须进行初始化;
 2).初始化对象必须是一个变量,且已定义好了。int &refVal3 = 10;是错误的。
 /******************************************/
 Sleep(10000);
 return 0;
}
原创粉丝点击