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)可在一个类型定义行中定义多个引用。必须在每个引用标识符前加"&"符号:*/
#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)
// 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;
/*从上可以看出,对引用的操作就是对其引用对象的操作。*/
// 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 (不懂。。。。。。)
//int &refVal3 = 10; // error:initializer must be an object (不懂。。。。。。)
//refVal = 5;
//std::cout << ival << std::endl;
//std::cout << refVal << std::endl;
/*这一规则的结果是必须在定义引用时进行初始化。初始化是指明引用指向哪个对象的唯一方法。*/
//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;
//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 对象是不合法的。
//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;
//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
//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;
////int &rval1 = 1.01; //必须被初始化的&rval1是对象。
//int &rval2 = ival;
//const int &rval3 = 1;
////在上题给出的定义下,下列哪些赋值是非法的?如果赋值合法,解释赋值的作用。
// rval2 = 3.14159;
// rval2 = rval3;
// ival = rval3;
//rval3 = ival;
//(a) 中的定义和 (b) 中的赋值存在哪些不同?哪些是非法的?
// rval2 = rval3;
// ival = rval3;
//rval3 = ival;
//(a) 中的定义和 (b) 中的赋值存在哪些不同?哪些是非法的?
//int ival = 0;
//const int &ri = 0;
// ival = ri;
// ri = ival;
// ri = ival;
//下列代码输出什么?
int i, &ri = i;
i = 5;
ri =10;
std::cout << i << " " << ri << std::endl;
i = 5;
ri =10;
std::cout << i << " " << ri << std::endl;
/******************************************
引用要注意的几点:
1).定义引用时候必须进行初始化;
2).初始化对象必须是一个变量,且已定义好了。int &refVal3 = 10;是错误的。
/******************************************/
Sleep(10000);
return 0;
}
return 0;
}