阴阳师初始什么好初始分类

找好工作,快人一步2014人阅读
C++编程易错总结(25)
一、类的声明
1.不完全类
只声明而尚未定义的类称为不完全类
不完全类只能用于定义指针、引用、参数类型、返回值类型,不能定义对象class M //求定义的类
Mat Test(Mat& B);//正确
Mat *pM//正确
M//错误,如果在任何位置(即使是在这句话的后面)定义了这个类,这句就是正确的
二、类的定义
1.常用关键字
(1)typedef:
类可以定义自己的局部类型的名字,局部类型名和原类型名可以混用
定义方法:typedef 原类型名 局部类型名
例:class Mat
typedef int myType
myType s[MAX][MAX];
Mat(myType a = MAX, myType b = MAX, myType type = 0);
Mat::Mat(int a, int b, int type)
:sizei(a),sizej(b){
memset(s, 0, sizeof(s));
(2)const:
const成员函数返回的引用,也是const/*从const成员函数返回的引用也是const*/
#include&iostream&
void set(int x){this-&x =}
/*const成员函数返回的引用也是const,a
如果把A&前面的const去掉会出错。
因为返回的是一个const的对象,返回类型却不是const
返回的内容和返回的类型不符*/
const A& Test1()const
/*错误。这是const成员函数的特点*/
/*不限于*this。不管返回的是什么,哪怕是一个定义为非const的对象,结果也是一样的*/
int main()
/*正确,虽然返回的是一个const,却用另一个非const来接收*/
b = a.Test1();
/*错误,既然是别名,那么别名的类型要与原来的类型相同*/
A &c = a.Test1();
//正确虽然在a.Test1()中a不能改变,但是这里已经出了这个成员函数的作用域
//正确,b接收了a.Test1()返回的数据的内容,但是它不是const
/*错误。a.Test1()是一个对象,这个对象是它的返回值,
虽然没有名字,但是它就是a.Test1()的返回值,
值是a.Test1()返回的值,类型是a.Test1()返回的类型,
因此它是const*/
a.Test1().set(2);
(3)mutable:
mutable将数据声明为可变数据成员。可变数据成员永远不能成为const,即使它是const对象的成员
例:class A
A(int a, int b):x(a),y(b){}
int main()
const A a(1,2);//const对象必须初始化
a.x = 3;//错误
a.y = 3;//正确
(4)friend:
(5)static:
2.类外定义的特殊要求
如果成员函数在类外定义,则:
(1)成员名必须有 类名:: 来限定
(2)形参表和成员函数可以不限定
(3)函数返回类型,如果使用的是类定义的类型,则需要使用完全限定名
例:class A
typedef int myT
int Test1(int a);
myType Test2(myType a);
int A::Test1(int a)
A::myType A::Test2(myType a)
三、类的初始化
1.使用构造函数初始化
(1)在初始化列表中初始化与在构造函数的函数体中赋初值的区别
定义是指开辟空间,初始化是指给一个初值。
在初始化列表中初始化时,定义和初始化同时进行,因此初始化的顺序与初始化列表的顺序无关,只与声明成员的次序相同
在函数体上赋值时,已经定义好了,再赋值
例:class A
A(int i){x =cout&&&construct A &&&i&&}
~A(){cout&&&delete A &&&x&&}
B():c(3),b(2),a(1){cout&&&construct B&&&}
~B(){cout&&&delete B&&&}
int main()
}输出结果:
construct A 1
construct A 2
construct A 3
construct B
delete A 3
delete A 2
delete A 1
这里特意让初始化列表的顺序不同,可以看出构造与析构的顺序与初始化列表无关,只与声明顺序有关
(2)必须使用初始化列表的成员
有些成员必须构造函数初始化列表中初始化,不可以在构造函数的函数体中初始化,如const成员或引用类型的成员
例:class A
A(int i):x(i){}
b =//错误,const不能被赋值
c =//错误,引用不能被赋值
d =//错误,已经开辟了空间,不能调用带一个参数的构造函数,也没有其它相应的函数
//初始化,这种做法效率较高,d(i)调用带一个参数的构造函数
A(int i):a(i),b(i),c(i),d(i){}
2.使用与初始化数组元素相同的方法初始化
对于没有定义构造函数并且全体数据成员均为public的类,可以采用与初始化数组元素相同的方式初始化成员,但这种方法不提倡
例:class A
int main()
A a = {1, &a+b&};
3.使用复制构造函数初始化
通过复制构造函数,通过一个对象初始化另一个对象,见
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:708619次
积分:11347
积分:11347
排名:第941名
原创:352篇
转载:35篇
译文:18篇
评论:657条
阅读:7538
文章:27篇
阅读:118021
(10)(1)(10)(10)(10)(3)(13)(10)(9)(5)(5)(5)(3)(1)(4)(1)(2)(3)(1)(4)(1)(1)(2)(1)(2)(4)(1)(3)(3)(4)(18)(37)(22)(21)(32)(16)(3)(12)(67)(49)引用类型_百度百科
本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来吧!
引用类型 由类型的实际值引用(类似于)表示的数据类型。如果为某个变量分配一个引用,则该变量将引用(或“指向”)原始值。不创建任何副本。引用类型包括类、接口、委托和装箱值类型。
引用类型简介
(reference type)
“引用”(reference)是c++的一种新的变量类型,是对C的一个重要补充。它的作用是为变量起一个别名。假如有一个变量a,想给它起一个别名,可以这样写:
这就表明了b是a的“引用”,即a的别名。经过这样的声明,使用a或b的作用相同,都代表同一变量。在上述引用中,&是“引用声明符”,并不代表地址。
不要理解为“把a的值赋给b的地址”。引用类型的数据存储在内存的堆中,而中只存放堆中对象的地址。声明引用并不开辟内存单元,b和a都代表同一变量单元。
注意:在声明类型时,必须同时使之初始化,即声明它代表哪一变量。在声明一个变量的引用之后,在本函数执行期间,该引用一直与其代表的变量相联系
,不能再作为其他变量的别名。下面的用法不对:
int a1,a2;
int &b=a1;
int &b=a2;//企图使b变成a2的别名(引用)是不行的。这样是错误的。
我们可以把a2的值赋给b。
引用类型区别
引用和指针的区别   看实例吧:
引用是C++中的概念,初学者容易把引用和混淆一起。
下面的程序中,n是m的一个引用(reference),m是被引用物(referent)。
n相当于m的别名(绰号),对n的任何操作就是对m的操作。
所以n既不是m的拷贝,也不是指向m的指针,其实n就是m它自己。
引用类型引用的规则
(1)引用被创建的同时必须被初始化(则可以在任何时候被初始化)。
(2)不能有NULL引用,引用必须与合法的关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
以下示例程序中,k被初始化为i的引用。
语句k = j并不能将k修改成为j的引用,只是把k的值改变成为6。
由于k是i的引用,所以i的值也变成了6。
int i = 5;
int j = 6;
k = // k和i的值都变成了6;
引用类型主要功能
引用的主要功能:传递函数的参数和返回值。
C++语言中,函数的参数和返回值的传递方式有三种:值传递、传递和引用传递。
以下是&值传递&的示例程序。
由于Func1函数体内的x是n的一份拷贝,改变x的值不会影响n, 所以n的值仍然是0。
void Func1(int x)
x = x + 10;
int n = 0;
cout && &n = & && n =& 0& n =& 0;& n = & && n && // n = 10 以下是& size=&14&&
void Func3(int &x) { x = x + 10; } ... int n = 0; Func3(n); cout && &n = & && n =& 10&&
(1) 在实际的程序中,引用主要被用做函数的--通常将类对象传递给一个函数.引用必须初始化. 但是用对象的地址初始化引用是错误的,我们可以定义一个引用。
1 int ival = 1092;
2 int &re = //ok
3 int &re2 = & //错误
4 int *pi = &
5 int *&pi2 = //ok
(2) 一旦引用已经定义,它就不能再指向其他的对象.这就是为什么它要被初始化的原因。
(3) const引用可以用不同类型的对象初始化(只要能从一种类型转换到另一种类型即可),也可以是不可寻址的值,如文字。例如
double dval = 3.14159;
//下3行仅对const引用才是合法的
const int &ir = 1024;
const int &ir2 =
const double &dr = dval + 1.0;
上面,同样的初始化对于非const引用是不合法的,将导致编译错误。原因有些微妙,需要适当做些解释。
引用在内部存放的是一个对象的地址,它是该对象的别名。对于不可寻址的值,如文字,以及不同类型的对象,为了实现引用,必须生成一个临时对象,引用实际上指向该对象,但用户不能访问它。
double dval = 23;
const int &ri =
编译器将其转换为:
int tmp = // double -& int
const int &ri =
同理:上面代码
double dval = 3.14159;
//下3行仅对const引用才是合法的
const int &ir = 1024;
const int &ir2 =
const double &dr = dval + 1.0;
内部转化为:
double dval = 3.14159;
//不可,文字常量
int tmp1 = 1024;
const int &ir = tmp1;
//不同类型
int tmp2 =//double -& int
const int &ir2 = tmp2;
//另一种情况,不可寻址
double tmp3 = dval + 1.0;
const double &dr = tmp3;
(4) 不允许非const引用指向需要临时对象的对象或值,即,产生临时变量的时候引用必须为const!!!!切记!!
int iv = 100;
int *&pir = &//错误,非const引用对需要临时对象的引用
int *const &pir = &//ok
const int ival = 1024;
int *&pi_ref = & //错误,非const引用是非法的
const int *&pi_ref = & //错误,需要临时变量,且引用的是,而pi_ref是一个非常量指针
const int * const &pi_ref = & //正确
const int *p = &
const int *&pi_ref = //正确
(5) ********对于const int *const & pi_ref = & 具体的分析如下:*********
1.不允许非const引用指向需要临时对象的对象或值
int a = 2;
int &ref1 =// OK.有过渡变量。
const int &ref2 = 2;// OK.产生临时变量,需要const引用
2.地址值是不可寻址的值
int * const &ref3 = &a; // OK;
3.于是,用const对象的地址来初始化一个指向的引用
const int b = 23;
const int *p = &b;
const int *& ref4 =
const int *const & ref5 = &b; //OK
const引用的语义到底是什么?
最后,我们可能仍然不明白const引用的这个const的语义是什么
const引用表示,试图通过此引用去(间接)改变其引用的对象的值时,会报错!
这并意味着,此引用所引用的对象也因此变成const类型了。我们仍然可以改变其指向对象的值,只是不通过引用
下面是一个简单的例子:
1 #include&iostream&
4 int main()
6 int val = 1024;
7 const int &ir =
10 //ir++;
12&&&val=&&&val&&&\n&;
13cout&&&ir=&&&
其中第10行,如果我们通过ir来改变val的值,编译时会出错。但是我们仍然可以通过val直接改变其值(第9行)
总结:const引用只是表明,保证不会通过此引用间接的改变被引用的对象!
另外,const既可以放到类型前又可以放到类型后面,放类型后比较容易理解:
string const *t1;
const string *t1;
typedef string*
const pstring cstr1 = &s;就出错了
但是放在类型后面不会出错:
pstring const cstr2 = &s;
引用类型使用
引用类型引用在类中的使用
   1. #include&iostream&
4. class A
6. public:
7. A(int i=3):m_i(i){}
8. void print()
10. cout&&&m_i=&&&m_i&&
12. private:
13. int m_i;
16. class B
18. public:
20. B(A& a):m_a(a){}
21. void display()
23. m_a.print();
25. private:
26. A& m_a;
30. int main(int argc,char** argv)
32. A a(5);
33. B b(a);
34. b.display();
引用类型注意
引用在类中使用需注意  其中,要注意的地方就是引用类型的的初始化问题,它不能直接在里初始化,必须用到,且也必须是引用类型。
凡是有引用类型的成员变量的类,不能有。原因是引用类型的成员变量必须在类构造时进行初始化。
如果两个类要对第三个类的数据进行共享处理,可以考虑把第三个类作为这两个类的引用类型的成员变量
企业信用信息您所在位置: &
 &  & 
钻头分类使用初始.doc11页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
文档加载中...广告还剩秒
需要金币:250 &&
你可能关注的文档:
??????????
??????????
***在钻杆前端,回转破碎煤或岩石的刀具。
应用学科:
煤炭科技(一级学科);矿山机械工程(二级学科);钻孔机械(三级学科)
钻头(zuàntóu)是用以在实体材料上钻削出通孔或盲孔,并能对已有的孔扩孔的刀具。常用的钻头主要有麻花钻、扁钻、中心钻、深孔钻和套料钻。扩孔钻和锪钻虽不能在实体材料上钻孔,但习惯上也将它们归入钻头一类。
[drilling bit]∶钻、钻床、钻探机上的刀具,用于在工件或岩石上造成孔洞
[aiguille]∶一种工具,用于在石头中或在其他石工材料中钻孔,或用于钻爆炸孔 详细解释
  挖坑作业时,钻头随立轴旋转,同时作轴向移动。土壤在钻头的扭矩和轴向力作用下被切削,在工作叶片的挤压和离心力作用下被松碎,形成土流压向坑壁,同时沿页面升运到地表。当土流运动到无坑壁阻挡处时,由于离心力作用碎土被抛到坑的周围,完成挖坑过程。
  一种钻头,包括一个刀杆(1),刀杆有一个尖端,尖端有两个位于一个主平面(C-C)上的切削刀片(5、5′),所述切削刀片(5、5′)具有在共同第二平面(E-E)上取向的短的中心切削刀刃。所述刀刃形成一个点状中心切削刀刃用于进入工件,并且由此将钻头对中。在刀
钻头杆上,设两个排屑槽(6、6′),所述排屑槽(6、6′)从尖端延伸到底端。在沿刀杆的任一截面上,排屑槽在管平面上都位于彼此径向相对的位置,管平面与在管的两侧的两个刃带的共同刃带平面(F-F)成90°延伸,所述刀杆在该平面具有最大的刚性。中心切削刀刃的第二平面(E-E)的取向与刃带平面或刀杆的底端的主刚性方向(F-F)大约成90°角。 一种在对混凝土等进行的钻孔作业中,能缓和钻
正在加载中,请稍后...Java(57)
类加载以及初始化的顺序是:
-&类的静态成员初始化分配内存(有父类的先父类,然后自己)
-&然后main方法执行
-&类初始化{类非静态成员的初始化,然后执行构造器(有父类的先给父类的非静态成员初始化,然后父类的构造器)}
实例(网易实习2016):
最终的输出为:
3 6 7 2 1 5 4
关于以下application,说法正确是什么?
public class Test {
static int x=10;
static {x+=5;}
public static void main(String[] args) //4
System.out.println(&x=&+x);
static{x/=3;};
A.&4行与9行不能通过编译,因为缺少方法名和返回类型
B.&编译通过,执行结果是:x=5
C.&编译通过,执行结果是:x=3
D.&9行不能通过编译,因为只能有一个静态初始化器
虚拟机在首次加载Java类时,会对静态初始化块、静态成员变量、静态方法进行一次初始化。我们不要去纠结这里的顺序,一般来说我们只需要知道,静态方法一般在最后。(静态初始化块(变量和方法)可以有多个,但是注意被加载时只能被初始化或者执行一次)。然后执行main方法。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:106822次
积分:3342
积分:3342
排名:第7906名
原创:220篇
转载:100篇
(23)(31)(1)(2)(2)(27)(6)(2)(8)(125)(8)(35)(5)(12)(6)(2)(12)(5)(7)(3)

参考资料

 

随机推荐