




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+基础知识2,信息学院 李崇威 ise_ QQ: 58296786,C+基础知识2,C+语言的产生、特点及结构特性 C+标准输入输出流 引用 类 构造函数 拷贝构造函数 析构函数,C+语言的产生,C+是从C语言发展演变而来的,首先是一个更好的C 引入了类的机制,最初的C+被称为“带类的C” 1983年正式取名为C+ 从1989年开始C+语言的标准化工作 于1994年制定了ANSI C+标准草案 于1998年11月被国际标准化组织(ISO)批准为国际标准,成为目前的C+,C+的特点,全面兼容C 它保持了C的简洁、高效和接近汇编语言等特点。 对C的类型系统进行了改革和扩充,比C更安全,其编译系统能检查出更多的类型错误。 C+也支持面向过程的程序设计,不是一个纯正的面向对象的语言。 支持面向对象的机制,可方便地构造出模拟现实问题的实体和操作。,C+程序的结构特性,#include void main( ) cout“Hello!n“; cout“Welcome to c+!n“; ,运行结果: Hello! Welcome to c+!,C+示例程序1:,#include using namespace std;,C+示例程序2: 两数相加,#include using namespace std; int add(int a, int b); / 函数原型说明 void main( ) / 主函数 int x, y, sum; / 定义三个整型变量 coutx; / 从键盘输入变量x的值 ciny; / 从键盘输入变量y的值 sum = add(x, y); / 调用函数add,将得到的值赋给变量sum cout“The sum is:”sum; / 输出两个数的和 int add (int a, int b) int c; c = a + b; return c; ,C+程序的编辑、编译和运行,C源程序文件扩展名为.C,而C+源程序文件扩展名为.CPP。 在Windows下,常用Visual C+开发环境来编辑、编译和运行C+程序。,C + 标准输入输出流,在C+中,语言本身并不包含输入和输出功能,但C+标准库提供了一套用于输入和输出的类库。 在C+的输入、输出系统中,最核心的对象是流(stream),一个流就是一个字节序列。流的操作包括对流的读和写。 C+输入输出流的思想:令标准I/O、文件和存储块看上去都一样,只需记住一个接口就可以了。 与标准C的输入输出库中的各种函数相比,C+的输入输出流更容易、更安全、更有效。,cout输出流 cout是预定义的输出流类对象。 当程序需要在屏幕上显示输出时,可以使用插入符“”从cin输入流中抽取字符,“”是预定义的提取运算符。 格式如下: cin表达式表达式,简单的I/O格式控制,用cin、cout进行数据的输入和输出时,都自动按照默认格式处理。但我们经常需要设置特殊的格式。这里只介绍最简单的格式控制。 C+的I/O流类库提供了一些控制符,可以直接嵌入到输入/输出语句中来实现I/O格式控制。使用格式控制符首先必须在源程序的开头包含iomanip.h。下表中列出了几个常用的I/O流类库格式控制符。,常用的I/O流控制符,例:控制符的使用 #include #include using namespace std; void main() int x; cinx; couthexx“ “octx“ “decxendl; cout123setw(6)456endl; coutsetw(5)setprecision(3)3.14159endl; ,引用,概念:引用通常被认为是某个变量的别名。 声明格式:类型 ,例如: int i=5; int 这里,j是一个整数类型的引用,用整型变量i对它进行初始化,这时j就可看作是变量i的别名 。,引用型变量是从指针型变量发展来的一种特殊类型的变量。引用变量的实质仍然是指针,但采用了不同于指针的表示方法,可以简化对函数有多个返回值时的处理,使得程序更加清晰可读。 引用型变量是C+的新增特性,是一种不具备自己的实际数据存储空间的变量,它必须与另一个同类型的变量共用一个空间, 其本身不是一个独立的变量。因此,引用只有声明,没有定义。,C+中的类,类是具有相同属性和行为的一组对象的集合。 类是一种复杂的数据类型,它是将不同类型的数据(属性)和与这些数据相关的运算(行为)封装在一起的集合体,其内部包括属性和行为两个主要部分。它为属于该类的全部对象提供了统一的抽象描述。 利用类可以实现数据的封装、隐藏、继承与派生。 利用类易于编写大型复杂程序,其模块化程度比C中采用函数更高。因为类将一些数据及与数据相关的函数封装在一起,使类中的数据得到很好的“保护”。在大型程序中不会被随意修改。,class 类名 private: 私有成员; public: 公有成员; (外部接口) protected: 保护成员; ;,分号不能少,例:用一个类来描述日期,其形式如下: class Clock public: void SetTime(int h, int m, int s); void ShowTime( ); private: int hour; int minute; int second; ;,类声明的一般格式如下:,成员包括:数据和函数,类声明中访问权限关键字的说明,private:用其限定的成员称为私有成员。 对私有数据成员:限定其在该类的内部使用,即只允许该类中的成员函数使用私有的数据成员 对私有成员函数:限定其只能被该类内的成员函数调用 类就相当于私有成员的作用域。 public:用其限定的成员称为公有成员。 公有成员的数据或函数不受类的限制,可以在类内或类外自由使用,它们是类与外部的接口 protected:用其限定的成员称为保护成员。 只允许在类内及该类的派生类中使用保护的数据或函数 保护成员的作用域是该类及该类的派生类,类声明格式中的3个部分必须至少要有一个。 三个关键字可以按任意次序出现任意次。 一旦使用了关键字,该关键字一直有效,直到下一个关键字开始为止。 private若排第一时则可以省去。 类中的数据成员可以是任何数据类型,但不能用auto,register,extern来进行说明。 不能在类声明中对数据成员进行初始化。,class Date int hour, minute, second; public: void SetTime(int h, int m, int s); void ShowTime( ); ;,三个均为私有,class Test int x=5, y=6; /是不允许的 extern float x; /是不允许的 ,成员函数的声明,1、将成员函数以普通函数的形式进行说明,这种成员函数在类外定义。其一般形式是: 返回类型 类名成员函数名(参数表) / 函数体 2、将成员函数以内联函数的形式进行说明。在C+中,可以用下面两种格式将成员函数声明为类的内联函数: 隐式声明:直接将函数声明在类内部。 显式声明:这种成员函数在类外定义,其一般形式是: inline 返回类型 类名:成员函数名(参数表) / 函数体 ,成员函数的声明通常采用以下两种方式:,:为作用域标志符,void Date : SetTime(int h, int m, int s) hour=h; minute=m; second=s; void Clock : ShowTime() couthour“:“minute“:“second; ,以普通函数的方式在类外定义成员函数:,class Point public: void Init(int initX, int initY) x = initX; y = initY; int GetX( ) return x; int GetY( ) return y; private: int x, y; ;,以内联函数的方式在类内隐式声明成员函数:,class Point public: void Init(int initX,int initY); int GetX( ); int GetY( ); private: int x,y; ;,以内联函数的方式在类外显式声明成员函数:,inline void Point:Init(int initX, int initY) x = initX; y = initY; inline int Point:GetX() return x; inline int Point:GetY() return y; ,说明 说明内联函数时, inline 必须和函数体放在一起, 而不是和函数原型。 内联函数是编译时在该函数的调用处用函数体进行替换,这样就节省了参数传递、控制转移等开销。 内联函数在第一次被使用之前必须进行声明或定义。 只有较短的函数才适用于内联函数。 内联函数体内不能有循环语句和switch语句。 使用内联函数是一种空间换时间的措施。 内联函数具有宏定义#define相同的作用和相似的机理,但消除了#define的不安全因素。,对象的定义和使用,通常我们把具有共同属性和行为的事物所构成的集合叫做类。类是用户自己定义的一种数据类型。 类的对象就是该类的某一特定实体,即类类型的变量。 对象的声明形式: 1、在声明类的同时,直接定义对象,即在声明类的右花括号“”后,直接写出属于该类的对象名表。 2、声明了类之后,在使用时再定义对象,定义的格式与一般变量的定义格式相同。,形式1: class Clock public: private: myClock1, myClock2;,形式2: class Clock public: private: ; main( ) Clock myClock1, myClock2; ,全局对象,类中成员的访问方式,类中成员互访 直接使用成员名 类外访问 通过类的对象访问公有数据成员和成员函数 访问的一般形式是: 对象名.数据成员名 或 对象名.成员函数名(参数表),“.”叫做对象选择符,简称点运算符,#include using namespace std; class Clock /类的声明略 /类的实现略 void main(void) Clock myClock; myClock.SetTime(8,30,30); myClock.ShowTime( ); ,举例说明:,构造函数,构造函数是一种特殊的成员函数,它的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。它有一些特殊的性质: 构造函数的名字必须与类名相同。 构造函数可以有任意类型的参数,但不能指定返回类型。它有隐含的返回值,该值由系统内部使用。 如果程序中未声明,则系统自动产生出一个默认形式的构造函数。 构造函数的函数体可写在类体内,也可写在类体外。 构造函数可以为内联函数、重载函数、带默认形参值的函数。 构造函数被声明为公有函数,但它不能像其他成员函数那样被显式地调用,它是在对象创建时被系统自动调用的。,class Clock public: Clock (int NewH, int NewM, int NewS); /构造函数 void SetTime(int NewH, int NewM, int NewS); void ShowTime( ); private: int Hour, Minute, Second; ;,例:,构造函数的实现: Clock:Clock(int NewH, int NewM, int NewS) Hour = NewH; Minute = NewM; Second = NewS; 建立对象时构造函数的作用: void main( ) Clock c (0,0,0); /隐含调用构造函数,将初始值作为实参。 c.ShowTime( ); ,通常,利用构造函数创建对象有以下二种方法: 利用构造函数直接创建对象。其一般形式为: 类名 对象名(实参表); 例: Clock c (0,0,0); 通过指针和new来实现。其一般形式为: 类名 *指针变量 = new 类名 (实参表); 例:Clock c = new Clock(0, 0, 0);,拷贝构造函数,如果想生成一个对象的副本怎么做? 新建一个对象,然后将已有对象的数据成员一一赋给新对象。可行,但繁琐。 拷贝构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,其形参为本类的对象引用。 其作用是使用一个已经存在的对象(由拷贝构造函数的参数指定的对象)去初始化一个新的同类的对象。 如果没有定义类的拷贝构造函数,编译器就会自动生成一个默认的函数,这个默认拷贝构造函数的功能是把初始值对象的每个数据成员的值都复制到新建立的对象中。,一般形式: class 类名 public : 类名(形参); /构造函数 类名(类名 &对象名);/拷贝构造函数 . ; 类名: 类名(类名 &对象名) /拷贝构造函数的实现 函数体 ,class Point public: Point(int xx=0, int yy=0) x=xx; y=yy; Point(Point ,例:,普通构造函数是在对象创建时被调用,而拷贝构造函数在以下三种情况下都会被调用: 1、当用类的一个对象去初始化该类的另一个对象时系统自动调用拷贝构造函数实现拷贝赋值。例如:,void main(void) Point A(1, 2); Point B(A); /拷贝构造函数被调用 coutB.GetX( )endl; ,拷贝构造函数的调用,2、若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。例如:,void fun1(Point p) coutp.GetX( )endl; void main( ) Point A(1, 2); fun1(A); /调用拷贝构造函数 ,3、当函数的返回值是类对象时,系统自动调用拷贝构造函数。例如:,Point fun2() Point A(1,2); return A; /调用拷贝构造函数 void main( ) Point B; B = fun2( ); ,析构函数,析构函数也是一种特殊的成员函数。它执行与构造函数相反的操作,通常用于撤消对象时的一些清理任务,如释放分配给对象的内存空间等。析构函数有以下一些特点: 析构函数与构造函数名字相同,但它前面必须加一个波浪号()。 析构函数没有参数,也没有返回值,而且不能重载。因此在一个类中只能有一个析构函数。 在对象的生存期结束时,编译系统会自动地调用析构函数。 如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数。,#include using namespace std; class Date public: Date(int y, int m, int d); / 构造函数 Date( ); / 析构函数 void setDate(int y, int m, int d); void showDate( ); private: int year, month, day; ;,例:,Date:Date(int y, int m, int d) / 构造函数的实现 cout“constructing.“en
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农发行北京市海淀区2025秋招小语种岗笔试题及答案
- 农发行唐山市路北区2025秋招笔试英文行测高频题含答案
- 农发行吉安市遂川县2025秋招笔试热点题型专练及答案
- 国家能源金华市浦江县2025秋招笔试言语理解与表达题专练及答案
- 国家能源成都市武侯区2025秋招笔试综合知识题专练及答案
- 农村集体土地租赁合同15篇
- 合伙投资协议书汇编15篇
- 员工感恩演讲稿
- 2025年河北秦皇岛城市发展投资控股集团有限公司公开选聘子公司职业经理1名考前自测高频考点模拟试题及答案详解(名校卷)
- 2025年上半年山东铁投集团校园招聘、社会公开招聘165人模拟试卷附答案详解(黄金题型)
- 人教版九年级物理上-各单元综合测试卷含答案共五套
- 文科物理(兰州大学)学习通网课章节测试答案
- 人教版高二数学(上)选择性必修第一册1.2空间向量基本定理【教学设计】
- 2025年安徽省公务员录用考试《行测》真题及答案
- 2025中医四大经典知识竞赛真题模拟及答案
- 2025至2030年川渝地区成品油行业市场运行现状及未来发展预测报告
- 2025年山东省委党校在职研究生招生考试(政治理论)历年参考题库含答案详解(5卷)
- 中医特禀体质讲解
- 危险化学品装卸管理课件
- 减肥与能量代谢课件
- 世赛基地管理办法
评论
0/150
提交评论