版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计
第二章从C过渡到C++
杨卫东左峥嵘华中科技大学自动化学院2017秋案例Ch1_TestCodes\ch1\test1,debug,MFC消息响应-Dlg_TestCodes\ch1\test1a\test1.dsw,struct,#pragmapackCh2TestCodes\ch2\test2a,t2a.cppTestCodes\ch2\Test2b\Test2b.dswTestCodes\ch2\Test2b\Test21.dswVs+OpencvOPENCV配置OPENCV配置OPENCV配置OPENCV配置OPENCV配置获取文件名.bat@echooffdir*248d.lib*>1ist.txt/o/bexitremdir*.*>1ist.txt/o/bexitopencv_calib3d2411d.libopencv_contrib2411d.libopencv_core2411d.libopencv_features2d2411d.libopencv_flann2411d.libopencv_gpu2411d.libopencv_highgui2411d.libopencv_imgproc2411d.libopencv_legacy2411d.libopencv_ml2411d.libopencv_nonfree2411d.libopencv_objdetect2411d.libopencv_photo2411d.libopencv_stitching2411d.libopencv_ts2411d.libopencv_video2411d.libopencv_videostab2411d.libOPENCV举例应用机器视觉作业1:VS+OPENCV第一次作业目的:vs+opencv编程实践
内容要求:实现一个图像或视频处理的例子,算法不限,带图形显示界面
提交文件:rar压缩包,包括工程及exe,demo数据,注意删掉临时文件,文件命名格式为学号-姓名-cpp2017作业1
邮件提交,主题为文件名
时间:2017/10/30前本卷须知工程文件清理Struct字节对齐#pragmapack(4)/*指定按4字节对齐*///结构体空间//ch1-2structPerson{ charname;//[9]; DWORDaddr[1]; charphone[10]; WORDa[2];//res DWORDdata[1]; };//2-24,4-28#pragmapack()/*取消指定对齐,恢复缺省对齐*/Personp[100];_TestCodes\ch1\test1a\test1.dswTy20150809v4-new-v7-home\Mydata4.cpp,数据定义第2章从C过渡到C++常量const变量命名空间usingnamespace内存分配c++的函数静态库Lib和动态库Dll在定义一个常量时,const比#define更加灵活。用const定义的常量含有数据类型,该常量可以参与逻辑运算const还有两个“保护〞功能:强制保护函数的参数值不发生变化,对于一个函数而言,如果其‘&’或‘*’类型的参数只作输入用,不作输出用,那么应当在该参数前加上const,以确保函数的代码不会改变该参数的值强制保护类的成员函数不改变任何数据成员的值在ISO/ANSIC++新标准中保存了C老标准中的常量,而且加以扩展,即任何类型的对象(指针、结构、数组、类等〕都可以定义成常量,采用一个关键字const常量const常量const〔1〕根本的数据类型定义成常量如:constintAsize=100;以后Asize就成为整型常量
〔2〕数组定义成常量如:constintdata[]={1,2,3,4,5};把该数组的每个元素都定义成了常量,在以后的程序中不能被赋值〔3〕结构定义成常量structcir{ intx; inty; floatr;};conststructcirc1={50,10,10.0};定义了一个cir结构常量c1TestCodes\ch2\test2a,t2a.cpp常量const〔4〕指针定义成常量分为三种情况:1〕把指针所指向的对象定义成常量但指针不是常量格式为:const<类型>*指针名=初值<类型>const*指针名=初值如:constchar*pc=“abcd〞;那么:pc[2]=‘a’;//出错而pc为指针变量可以重定位如:pc=“1234〞;TestCodes\ch2\test2a,t2a.cpp常量const2〕把指针定义成常量但指针指向的对象不是常量格式为:<类型>*const指针名=初值如:char*constpc=“abcd〞;//如:constchar*pc=“abcd〞;那么:pc[2]=‘a’;//不出错而pc为指针常量不可以重定位如:pc=“1234〞;//出错3〕把指针定义成常量且指针指向的对象也定义为常量格式为:const<类型>*const指针名=初值如:constchar*constpc=“abcd〞;那么:pc[2]=‘a’;//出错,指向的字符串不能更改而pc为指针常量不可以重定位如:pc=“1234〞;//出错TestCodes\ch2\test2a,t2a.cpp在ISO/ANSIC++新标准中保存了C老标准中的变量,而且对其功能和应用进行了扩展〔1〕C++可以在程序中随时定义变量,不必象C那样定义在作用域的开始局部如可以写成: …….. for(inti=0;i<10;i++) { … }变量定义变量作用域〔2〕作用域运算符::假设全局变量与局部变量同名,在局部变量的作用域内会把同名的全局变量隐藏起来,在C语言中肯定是无法访问的,但在C++中可以通过作用域运算符“::〞来访问它#include<iostream.h>intx;voidmain(){ intx=1; cout<<“x=“<<x<<endl; ::x=6; cout<<“x=“<<::x<<endl;}ch2\test2a\t2a.cpp引用变量〔3〕引用&C语言:取地址是把变量的地址取出来,让一个指针指向这个地址C++中的引用:为变量起一个新名字,是引用而非指针
格式:<类型> &引用名=变量名;如: inti=10; int&j=i; i++; j++; ……..12,12why?引用变量指针可以随时改变指向的变量,而引用只能在初始化的时候赋值,赋值后不能变更为其他变量指针:inti=10;int*p=&i;要想改变i的值就写*p=5;还以改变p指向的变量如p=p+1;*p++,(*p)++// ++*p;引用:inti=10;int&p=i;要想改变i的值就写p=5;这里写p=p+1;就把i加1了命名空间namespace作用在大规模程序的设计中,或者使用各种各样的C++库时,这些标识符的命名容易发生冲突,标准C++引入了关键字namespace〔命名空间/名字空间/名称空间/名域〕,可以更好地控制标识符的作用域符号常量、变量、宏、函数、结构、枚举、类和对象等的名称〔name〕隔离,防止名称冲突命名空间〔namespace〕:是一种描述逻辑分组的机制,可以将按某些标准在逻辑上属于同一个集团的声明放在同一个命名空间中usingnamespacestd;命名空间namespace如何定义给自己每一个对象都加前缀以区别,mylib_cout命名空间usingnamespacestd,告诉编译器这行代码之后用到的cout、cin等函数都是std这个命名空间内定义的标准C++库〔不包括标准C库〕中所包含的所有内容〔包括常量、变量、结构、类和函数等〕都被定义在std命名空间里面#include<iostream>usingnamespacestd;voidmain(){ cout<<"\nTypeanumber:"; inti; cin>>i;cout<<"\nTypeaanothernumber:"; floatf;cin>>f;cout<<"\nThetwonumberswere“<<i<<"and"<<f<<"\n";}TestCodes\ch2\test2a,t2a.cpp命名空间namespace增加命名空间是开放的,可随时把新的成员名称参加到已有的命名空间之中去可组合现有的命名空间,定义为新的命名空间namespaceA{
inti;
voidf();}//
现在A有成员i和f()namespaceA{
intj;
voidg();}//
现在A有成员i、f()、j和g()namespaceMYLib{
usingnamespacespace1;
usingnamespacespace2;
usingspace3::List;
voidfun(String&,List&);}使用命名空间作用域解析运算符〔::〕Space1::f()using指令〔usingnamespace〕usingnamespace
space1;using声明〔using〕把命名空间的特定成员的名称,添加该声明所在的区域中,使得该成员可以直接被使用。但是该命名空间的其他成员,仍然需要作用域解析运算符来定位更平安,编译器会提示出错using
space1::f;f();//space1::f()内存分配内存的三种分配方式:从静态存储区分配:此时的内存在程序编译的时候已经分配好,并且在程序的整个运行期间都存在。全局变量,static变量等在此存储在栈区分配:相关代码执行时创立,执行结束时被自动释放。局部变量在此存储。栈内存分配运算内置于处理器的指令集中,效率高,但容量有限在堆区分配:动态分配内存。用new/malloc时开辟,delete/free时释放。生存期由用户指定,灵活。但有内存泄露等问题TestCodes\ch2\Test2b\Test2b.dsw内存分配malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符,都可申请动态内存和释放内存对于非内部数据类型的对象:new/delete,执行构造和析构函数 CMyMemTest*pp2=newCMyMemTest[5]; cout<<pp2[1].m_Step<<endl; delete[]pp2;free——“new创立的动态对象〞?delete——“malloc申请的动态内存〞new/delete必须配对使用,malloc/free也一样TestCodes\ch2\Test2b\Test2b.dsw内存分配1)new的使用 格式: new<类型>(初值表)或new<类型>使用如下例:(有几点要注意).用new运算符可以创立一维动态数组格式:<类型>*指针变量名=new<类型>[元素个数]如:int*p=newint[10];2)delete的使用delete只能作用于用new返回的指针格式:delete指针名; delete[]指向数组的指针名;//用于由new创立的数组内存分配…….int*p;int*pi=newint[10];……if((p=newint)==NULL){ cout<<“heaperror\n〞; exit(1);}else{…….}delete[]pi;deletep;内存分配举例:二维指针CMyLibfloat**ppArrayF;BYTE**ppArrayB;/*Allocationa2_dimensiondynamicarray*/void**CMyLib::fspace_2d(introw,intcol,intlenth){ inti; void**a; a=(void**)calloc(sizeof(void*),row); for(i=0;i<row;i++) { a[i]=(void*)calloc(lenth,col); } return(a);}TestCodes\ch2\Test2b\Test2c.dsw内存分配/*Tofreea2_dimensiondynamicarray*/voidCMyLib::ffree_2d(void**a,introw){ inti;if(a==NULL)return; for(i=0;i<row;i++) free(a[i]); free(a); a=NULL;}作业:一维/二维指针复用二维指针/一维指针转换——内存复用指针访问二维指针与一维指针转换void**CMyLib::fspace_2d1(introw,intcol,intlenth){ inti; void**b; void*pp; b=(void**)calloc(sizeof(void*),row); pp=(void*)calloc(lenth,row*col); for(i=0;i<row;i++) { b[i]=(void*)((BYTE*)pp+i*col*lenth);//???? } return(b);}//如何释放?TestCodes\ch2\Test2b\Test2b.dsw
fspace2D.dsw//简化版C++的函数
(1)设置函数参数的缺省值
c++容许在函数的原型说明中给一个或多个形参指定初值,该初值将会成为缺省值,当调用函数未指定初值时生效.classTest{private:intx,y;public: //ch2-p26,defaultTest(inti,intj=20){x=i;y=j;}intgetx(){returnx;}intgety(){returny;}};TestCodes\ch2\Test2b\Test2b.dsw内联函数
(2)内联函数(inlinefunction)[考虑效率问题:直接嵌入] 1)定义
inline+函数定义例: #include<iostream.h> inlineintadd(inta,intb) { returna+b; } voidmain() { intx; x=add(3,5); cout<<“x=“<<x<<endl; }#defineADD(a,b)(a+b)有几点要注意函数重载Overload
(3)函数重载 是指在同一作用域内多个函数体可以使用相同的函数名,这类函数称为重载函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 继发性湿疹的护理
- 2026年教师资格证(数学教学能力)考试题及答案
- 2025河北兴隆县卫生健康局选调全额事业编制人员12人笔试备考试题及答案解析
- 2025下半年广东深圳法院劳动合同制审判辅助人员招录145人备考考试题库及答案解析
- 2025河南漯河市科教文化艺术中心人才引进1人笔试模拟试题及答案解析
- 2025四川宜宾市屏山县卫生健康局下属事业单位屏山县生育服务和爱国卫生事务中心考调事业单位人员2人模拟笔试试题及答案解析
- 2025年度黄石市中心医院专项公开招聘46名事业编制工作人员备考笔试试题及答案解析
- 中建建筑电气系统调试指导手册
- 2025四川攀枝花市仁和区紧密型县域医共体招聘8人笔试参考题库及答案解析
- 2025中国工程院与清华大学联合培养博士后研究人员招收1人模拟笔试试题及答案解析
- 黑龙江省哈尔滨市南岗区2024-2025学年七年级上学期期末考试英语试题(含答案无听力原文及音频)
- 输血科院感知识培训课件
- 渔业养殖钢架棚施工合同
- 手术室安全与事故应对
- 血透尿毒症脑病
- 黑龙江省哈尔滨八中2025届高二上数学期末学业水平测试模拟试题含解析
- 统编版(2024)语文七年级上册第六单元 分课基础预习练+单元巩固练(含答案)
- DL∕T 5143-2018 变电站和换流站给水排水设计规程
- 高中英语词汇3500词(必背)
- imatest教程完整课件
- 巨量千川初级道题不确定答案附有答案
评论
0/150
提交评论