4.6.2 BEGIN…END
其语法如下:
BEGIN
<命o行或E序?gt;
END
BEGIN…END用来讑֮一个程序块Q将在BEGIN…END内的所有程序视Z个单元执行BEGIN…ENDl常在条件语句,如IF…ELSE中用。在BEGIN…END中可嵌套另外的BEGIN…END来定义另一E序块?
4.6.3 CASE
CASE 命o有两U语句格?
CASE <q算?gt;
WHEN <q算?gt;THEN<q算?gt;
?
WHEN<q算?gt;THEN<q算?gt;
[ELSE<q算?gt;]
END
CASE
WHEN <条g表达?gt; THEN <q算?gt;
WHEN <条g表达?gt; THEN <q算?gt;
[ELSE <q算?gt;]
END
CASE命o可以嵌套到SQL命o中? ?-10Q调整员工工资,工作U别为?”的上调8%Q工作别ؓ?”的上调7%Q工作别ؓ?”的上调6%Q其它上?%? use pangu
update employee
set e_wage =
case
when job_level = ??then e_wage*1.08
when job_level = ??then e_wage*1.07
when job_level = ??then e_wage*1.06
else e_wage*1.05
end
注意:执行CASE子句Ӟ只运行第一个匹配的子名?
4.6.4 WHILE…CONTINUE…BREAK
其语法如?
WHILE <条g表达?gt;
BEGIN
<命o行或E序?gt;
[BREAK]
[CONTINUE]
[命o行或E序块]
END
WHILE 命o在设定的条g成立时会重复执行命o行或E序块。CONTINUE命o可以让程序蟩qCONTINUE 命o之后的语句,回到WHILE 循环的第一行命令。BREAK 命o则让E序完全跛_循环Q结束WHILE 命o的执行。WHILE 语句也可以嵌套?
?-11:
declare @x int @y int @c int
?-11:
declare @x int, @y int, @c int
select @x = 1, @y=1
while @x < 3
begin
print @x --打印变量x 的? while @y < 3
begin
select @c = 100*@ x+ @y
print @c --打印变量c 的? select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
q行l果如下
1
101
102
2
201
202
]]>re: 我的java学习W记Q第一?回顾C/C++ 基本概念Q?/title>http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2678噼里啪啦的世?/dc:creator>噼里啪啦的世?/author>Thu, 31 Mar 2005 22:53:00 GMThttp://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2678最基本的用?
const int a=100; b的内容不?b只能?00也就是声明一个intcd的常?#define b =100)
int const b=100; //和上面作用一?
const指针和引用一般用在函数的参数? int* m = &a; //出错,帔R只能用常指针
int c= 1;const int*pc = &c;//常指针可指向帔R
const int* pa = &a; //指针指向的内容ؓ帔R(是b的g?
int const *a = &b; //指针指向的内容ؓ帔R(是b的g?*p=3//error
int* const a = &b; //指针为常?不能更改指针了如 a++但可以改?p=3;
int A(int)const; //是常函数Q只能用在类中,调用它的对象不能Ҏ变成员? const int A(); //q回的是帔R,所以必这么调?cosnt int a=A();
int A(const int); //参数不能改?可用在Q意函? int A(const int*);
....
int height() const;//常函数只能由常函数调? int max(int,int) const;
int Max = max(height(),height());
const int* pHeap = new int;
delete pHeap;
p = NULL;//出错
我的解决办法是强制类型{? const int* pHeap = new int(1);
delete (int*)pHeap;
pHeap = NULL;
一、const 和引用联合用的时候要注意
const int a = 1;
const int& ref1 = a;
const int& ref2 = 1;
能不能把自己的经验也谈谈。大家交交? q个是我在调错时发现的
int height() const;//常函数只能由常函数调? int max(int,int) const;
int Max = max(height(),height());
Thinking again in C++Q一Q常量性原?cphjQ原作)
有些地方很受启发
1.不能const修饰的Q何对象、引用和指针作ؓ赋D辑ּ的左倹{? const int cx=100;
const int & rcx=cx;
const int * pcx=&cx;
cx=200; //error
rcx=200; //error
*pcx=200; //error
2.constcd的对象不能直接被non-constcd的别名所引用? (1)不能constcd的对象传递给non-constcd的引用? const int cx=100;
int & rx=cx; //error
(2)不能constcd的实参传递给形参为non-constcd引用的函数? void f(int a)
{
}
void g(int & ra)
{
}
const int cx=100;
f(cx); //ok
g(cx); //error
(3)不能constcd的对象作为non-constcd引用的函数返回倹{? int & f(const int & rca)
{
return rca; //error
}
int x=100;
f(x);
3.可以使用constcd别名引用non-const对象。此旉过const引用不能修改对象Q但对象可以通过non-const引用被修攏V? int x=100;
int & rx=x;
const int & rcx=x; //ok
x=200;
rx=200;
rcx=200; //error
4.指针的属性有两个Q指针的cd和指针本w的帔R性。其中,指向const对象与指向non-const对象Q是不同的指针类型? int x=100;
const int * pcx=&x; //[1]
int * px=&x; //[2]
int y=100;
int * const cpy=&y; //[3]
int * py=&y; //[4]
[1][2]两个指针的类型不同;[3][4]两个指针的常量性不同? 对象与指向对象的指针的规则类g对象与引用。即Qconstcd的对象不能直接被non-constcd的指针所指示Q同2Q;可以使用constcd的指针指向non-const对象Q同3Q?
5.可以相同类型(包括帔R性)的const指针Dlnon-const指针? int x=100;
int * px;
const int * pcx=&x;
px=pcx; //error
int * const cpx=&x;
px=cpx; //ok
6.若函数的q回gؓ内徏cd或是指针Q则该返回D动成为const性质。但自定义类型则为non-const性质? int f() //相当于返回const int
{
return 100;
}
int * g(int & ra) //相当于返回int * const
{
return &ra;
}
class CTest
{
int n;
public:
CTest(int n){this->n=n;}
};
CTest h() //q回的就是CTest
{
return CTest(200);
}
f()=200; //error
int x=100;
int y=200;
int * px=&x;
g(y)=px; //error
*g(y)=x; //okQ从q点可以看出g()q回的不是const int *
const int b=100; b的内容不?b只能?00
int const b=100; b必须为int?不能为其他类?
q?句话的意思应该是一L?Q?THINKING IN C++是这栯?
const int a=100; a的内容不?a只能?00Q同样不能类型{换)? int const b=100; b必须为int?不能为其他类?Q同样在使用中不能修改)? 所以a和b是一LQ称为整型常敎ͼ在用中不能被修改,当然都不能{为其他类型了?
#include <iostream>
using namespace std;
int main()
{
const int a = 100;
int const b = 100;
a = 100; //q四条语句编译时都会出现“Cannot modify a const object
b = 100; //in function main()”的错误提示Q也是_M企图修改 a = 100.0; //a和bQ其实是一LQ的行ؓ都会出现“灾䏀,在语法上讲就 b = 100.0; //是a和b都不能出现在赋D句的左边Q?
cout<<'\n'<<a<<'\n'<<b<<endl;
return 0;
}
常函数的调用是这LQ常量对象只能调用常成员函数Q非帔R对象卛_以调常成员函敎ͼ也可以调一般成员函敎ͼ但当某个函数有const和非const两个版本Ӟconst对象调const版本Q非const对象调非const版本
例:
class A
{
public:
int & GetData(){return data;}
const int & GetData()const {return data;}
private:
int data;
}
A a;
a.GetData();//调用int & GetData(){return data;}
//但如果没有这个函敎ͼ也可以调用const int & GetData()const
const A const_a;
const_a.GetData();//调用const int & GetData()const {return data;}
常函数只能调常函敎ͼ也是׃q个原因
你狠!加两?
一、const 和引用联合用的时候要注意
const int a = 1;
const int& ref1 = a;
const int& ref2 = 1;
]]>re: 我的java学习W记Q第一?回顾C/C++ 基本概念Q?/title>http://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2677噼里啪啦的世?/dc:creator>噼里啪啦的世?/author>Thu, 31 Mar 2005 22:52:00 GMThttp://www.aygfsteel.com/plpa/archive/2005/04/01/2673.html#2677【规?-3-1】需要对外公开的常量放在头文g中,不需要对外公开的常量放在定义文件的头部。ؓ便于理Q可以把不同模块的常量集中存攑֜一个公q头文件中? 【规?-3-2】如果某一帔R与其它常量密切相养I应在定义中包含这U关p,而不应给Z些孤立的倹{? 例如Q? const float RADIUS = 100;
const float DIAMETER = RADIUS * 2;
cM的常? 有时我们希望某些帔R只在cM有效。由?define定义的宏帔R是全局的,不能辑ֈ目的Q于是想当然地觉得应该用const修饰数据成员来实现。const数据成员的确是存在的Q但其含义却不是我们所期望的。const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因ؓcd以创建多个对象,不同的对象其const数据成员的值可以不同? 不能在类声明中初始化const数据成员。以下用法是错误的,因ؓcȝ对象未被创徏Ӟ~译器不知道SIZE的值是什么? class A
{? const int SIZE = 100; // 错误Q企囑֜cd明中初始化const数据成员
int array[SIZE]; // 错误Q未知的SIZE
};
const数据成员的初始化只能在类构造函数的初始化表中进行,例如
class A
{? A(int size); // 构造函? const int SIZE ;
};
A::A(int size) : SIZE(size) // 构造函数的初始化表
{
? }
A a(100); // 对象 a 的SIZEgؓ100
A b(200); // 对象 b 的SIZEgؓ200
怎样才能建立在整个类中都恒定的常量呢Q别指望const数据成员了,应该用类中的枚D帔R来实现。例? class A
{? enum { SIZE1 = 100, SIZE2 = 200}; // 枚D帔R
int array1[SIZE1];
int array2[SIZE2];
};
枚D帔R不会占用对象的存储空_它们在编译时被全部求倹{枚丑ָ量的~点是:它的隐含数据cd是整敎ͼ其最大值有限,且不能表CQҎQ如PI=3.14159Q?
【规?-1-1?量使用含义直观的常量来表示那些在E序中多ơ出现的数字或字W串? 例如Q? #define MAX 100 /* C语言的宏帔R */
const int MAX = 100; // C++ 语言的const帔R
const float PI = 3.14159; // C++ 语言的const帔R
const ?#define的比? C++ 语言可以用const来定义常量,也可以用 #define来定义常量。但是前者比后者有更多的优点:
Q?Q?const帔R有数据类型,而宏帔R没有数据cd。编译器可以对前者进行类型安全检查。而对后者只q行字符替换Q没有类型安全检查,q且在字W替换可能会产生意料不到的错误(辚w效应Q? Q?Q?有些集成化的调试工具可以对const帔Rq行调试Q但是不能对宏常量进行调试?
____从以上的概念便也能基本清楚,typedef只是Z增加可读性而ؓ标识W另L新名U?仅仅只是个别?Q?define原本在C中是Z定义帔RQ到了C++Qconst、enum、inline的出C它也渐渐成ؓ了v别名的工兗有时很Ҏ搞不清楚与typedef两者到底该用哪个好Q如#define INT intq样的语句,用typedef一样可以完成,用哪个好呢?我主张用typedefQ因为在早期的许多C~译器中q条语句是非法的Q只是现今的~译器又做了扩充。ؓ了尽可能地兼容,一般都遵@#define定义“可诠Z的帔R以及一些宏语句的Q务,而typedef则常用来定义关键字、冗长的cd的别名?