oop第4部分_静态成员和友元(c0102)

合集下载

《C++程序设计语言》课程教学指导

《C++程序设计语言》课程教学指导

《C++程序设计语言》课程教学指导(班级:200610587)编写:兰济昀测绘工程专业2006.8《C++程序设计语言》课程教学指导一、本课程的性质、目的面向对象程序设计是测绘工程专业的一门选修课程。

面向对象软件开发方法是吸收了软件工程领域有益概念和有效的方法而发展起来的一种软件开发方法。

它集抽象性、封装性、继承性和多态性于一体,可以帮助人们开发出模块化、数据抽象程度高的,体现信息隐蔽、可复用、易修改、易扩大等特性的程序。

本课程主要介绍面向对象程序设计的方法和C++ 语言的基本概念。

以C++ 语言中的面向对象机制为主。

学习者在学习过程中可以通过大量的程序实例和相关练习,逐步掌握C++ 的面向过程和面向对象的功能,从而掌握面向对象程序设计的基本知识和基本技能。

二、本课程的教学重点通过本课程的学习,可以使学生熟悉面向对象 C++ 语言发展的历史、为什么要面向对象、面向对象语言分类、 C++ 中支持面向对象的特点及面向对象的软件开发环境Microsoft Visual C++ ,理解和掌握面向对象程序设计( OOP )的基本思想及基本概念:抽象、继承、封装、多态性,掌握使用 C++ 语言进行面向对象编程的技术:函数重载、运算符重载、内联函数、虚函数、友元函数,编写实现“继承”和“多态性”的 C++ 程序,初步认识 VC++ 应用程序设计方法及过程。

理论部分:本课程的教学应着重立足于:1、掌握C++程序设计语言的基本语法与规则。

2、灵活运用过程化编程方法,对一些简单的问题,能通过编程实现加以解决。

3、基本把握各语法现象,重点把握函数、程序结构、指针、引用、类概念。

对一些简单的程序设计实例,会举一反三。

4、了解结构化程序设计和面向对象程序设计方法之差别,理解面向对象程序设计的方法。

5、能够分析面向对象程序的程序结构,阅读和理解面向对象的程序。

6、能够简单模仿面向对象程序,并能上机实现之。

实践部分:鉴于本课程具有很强的实践性,本课程教学的另一个重点是应注重在计算机上的实践,并辅之以课程作业和实验等实践性教学环节。

C++类静态成员与类静态成员函数详解

C++类静态成员与类静态成员函数详解

C++类静态成员与类静态成员函数详解当将类的某个数据成员声明为static时,该静态数据成员只能被定义⼀次,⽽且要被同类的所有对象共享。

各个对象都拥有类中每⼀个普通数据成员的副本,但静态数据成员只有⼀个实例存在,与定义了多少类对象⽆关。

静态⽅法就是与该类相关的,是类的⼀种⾏为,⽽不是与该类的实例对象相关。

静态数据成员的⽤途之⼀是统计有多少个对象实际存在。

静态数据成员不能在类中初始化,实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的。

也不能在类的构造函数中初始化该成员,因为静态数据成员为类的各个对象共享,否则每次创建⼀个类的对象则静态数据成员都要被重新初始化。

静态成员不可在类体内进⾏赋值,因为它是被所有该类的对象所共享的。

你在⼀个对象⾥给它赋值,其他对象⾥的该成员也会发⽣变化。

为了避免混乱,所以不可在类体内进⾏赋值。

数据类型类名::静态数据成员名=初值不能⽤参数初始化表对静态成员初始化。

⼀般系统缺省初始为0。

静态成员是类所有的对象的共享的成员,⽽不是某个对象的成员。

它在对象中不占⽤存储空间,这个属性为整个类所共有,不属于任何⼀个具体对象。

所以静态成员不能在类的内部初始化,⽐如声明⼀个学⽣类,其中⼀个成员为学⽣总数,则这个变量就应当声明为静态变量,应该根据实际需求来设置成员变量。

复制代码代码如下:#include "iostream"using namespace std;class test{private:int x;int y;public:static int num;static int Getnum(){x+=5; // 这⾏代码是错误的,静态成员函数不能调⽤⾮静态数据成员,要通过类的对象来调⽤。

num+=15;return num;}};int test::num = 10;int main(void){test a;cout<<test::num<<endl; //10test::num = 20;cout<<test::num<<endl; //20cout<<test::Getnum()<<endl; //35cout<<a.Getnum()<<endl; //50system("pause");return 0;}通过上例可知: x+=5; // 这⾏代码是错误的静态函数成员必须通过对象名来访问⾮静态数据成员。

c++期末考试真题()

c++期末考试真题()

一、填空题1. 类是一组具有共同的_属性___ 特征和行为特征的对象的抽象。

2. 在面向对象程序设计中,一个对象向另一个对象发出的请求被称为_消息_。

3. 用class作关键字进行类声明,默认的访问属性是private(私有的)_4. 函数名重载是指同一作用域内的多个函数使用相同的函数名,这些同名函数要从参数类型和参数个数____进行区分。

5. 构造函数的作用是__在创建对象时对对象进行初始化____ 。

6. 多重继承指一个派生类可以有__多个基类______ 。

7. 保护继承下,基类中所有公有成员在派生类中的访问属性是__保护的____ 。

8. 假定要访问一个对象指针p所指对象中的b成员,则表示方法___ p.b ______。

9. 若需要把一个函数“void F();”定义为一个类AB的友元函数,则应在类AB的定义中加入一条语句:friend void F(AB &)_。

10.Static成员函数与普通成员函数的区别是_静态成员函数没有this指针______。

11.若要在程序文件中进行标准输入输出操作,则必须在开始的#include命令中使用___ iostream ____头文件。

12.1. 关键字_____C_______ 说明对象或变量初始化后不会被修改。

a. staticb. publicc. constd. inline2. 如果调用带有默认参数的函数时缺少一个参数,则____B_____参数就作为这一参数。

a. 第一个b. 最后一个c. 中间一个d. 以上都不是3. 成员函数可声明为静态的,条件是它不访问____C______类成员。

a. 静态b. 常数c. 非静态d. 公共4. 内联函数执行起来比标准函数_____B__________。

a. 更慢b. 更快c. 次数更多d. 以上都不是5. 默认参数的值由_________C__________提供。

a. 该函数b. 调用程序c. 上述二者d. 以上都不是6. 在C++ 中,混合类型表达式_____A________。

C++开发基础(习题卷20)

C++开发基础(习题卷20)

C++开发基础(习题卷20)说明:答案和解析在试卷最后第1部分:单项选择题,共59题,每题只有一个正确答案,多选或少选均不得分。

1.[单选题]C++当中,若局部变量和全局变量重名,会发生什么?A)只能访问局部变量B)局部变量会屏蔽全局变量,要使用全局变量,需要使用“::”C)全局变量会屏蔽局部变量,要使用局部变量,需要使用“::”D)只能访问全局变量2.[单选题]对于线性表的描述正确的是()A)一个有限序列,可以为空B)一个有限序列,不可以为空C)一个无限序列,可以为空D)一个无限序列,不可以为空3.[单选题]下列函数原型声明中错误的是( )。

A)void Fun(int x=0, int y=0);B)void Fun(int x, int y);C)void Fun(int x, int y=0);D)void Fun(int x=0, int y);4.[单选题]树的度不为0的结点称为A)根B)叶子C)分支结点D)父结点5.[单选题]已知如下程序:class B{public:B(){}B(int c):count(c){}virtual void print() const=0;private:int count;};class D:public B{public:D():B(0){}void print() const {cout<<""hello""<<endl;}};void main(){D d(10);B *pb;pb = &d; // OKB &cb = d;D dd = *pb; //2 B对象不能转换为DD &cd = cb; //3 B对象不能转换为D&B bb = d; //4 B类,不能实例化抽象类}则在标出的几个语句中,没有错误的是( )。

A)1B)2C)3D)46.[单选题]下列选项中,不属于类模型结构图中的是( )A)类名B)属性C)操作D)对象名7.[单选题]在一棵有n个结点的二叉树中,若度为2的结点数为n2,度为1的结点数为n1,度为0的结点数为n0,则树的最大高度为A)n0+n1+n2B)n1+n2C)n2+1D)18.[单选题]使用派生类的主要原因是( )A)提高代码的可重用性B)提高程序的运行效率C)加强类的封装性D)实现数据的隐藏9.[单选题]下列关于实参和形参说法错误的是( )。

C++友元函数和友元类(C++friend)详解

C++友元函数和友元类(C++friend)详解

C++友元函数和友元类(C++friend)详解私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接⼝(成员函数)间接地进⾏。

这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的⿇烦。

是从结构化的C语⾔发展⽽来的,需要照顾结构化设计程序员的习惯,所以在对私有成员可访问范围的问题上不可限制太死。

C++ 设计者认为,如果有的程序员真的⾮常怕⿇烦,就是想在类的成员函数外部直接访问对象的私有成员,那还是做⼀点妥协以满⾜他们的愿望为好,这也算是眼前利益和长远利益的折中。

因此,C++ 就有了友元(friend)的概念。

打个⽐⽅,这相当于是说:朋友是值得信任的,所以可以对他们公开⼀些⾃⼰的隐私。

友元分为两种:友元函数和友元类。

友元函数在定义⼀个类的时候,可以把⼀些函数(包括全局函数和其他类的成员函数)声明为“友元”,这样那些函数就成为该类的友元函数,在友元函数内部就可以访问该类对象的私有成员了。

将全局函数声明为友元的写法如下:friend 返回值类型函数名(参数表);将其他类的成员函数声明为友元的写法如下:friend 返回值类型其他类的类名::成员函数名(参数表);但是,不能把其他类的私有成员函数声明为友元。

关于友元,看下⾯的程序⽰例。

1. #include<iostream>2. ug namespace std;3. class CCar; //提前声明CCar类,以便后⾯的CDriver类使⽤4. class CDriver5. {6. public:7. void ModifyCar(CCar* pCar); //改装汽车8. };9. class CCar10. {11. private:12. int price;13. friend int MostExpensiveCar(CCar cars[], int total); //声明友元14. friend void CDriver::ModifyCar(CCar* pCar); //声明友元15. };16. void CDriver::ModifyCar(CCar* pCar)17. {18. pCar->price += 1000; //汽车改装后价值增加19. }20. int MostExpensiveCar(CCar cars[], int total) //求最贵⽓车的价格21. {22. int tmpMax = -1;23. for (int i = 0; i<total; ++i)24. if (cars[i].price > tmpMax)25. tmpMax = cars[i].price;26. return tmpMax;27. }28. int main()29. {30. return 0;31. }这个程序只是为了展⽰友元的⽤法,所以 main 函数什么也不做。

面向对象程序设计(C++)教学大纲

面向对象程序设计(C++)教学大纲

面向对象程序设计(C++)教学大纲课程类别:专业基础课适用专业:计算机应用技术授课学时:64课程学分:4一、课程性质、任务本课程是计算机应用技术专业的专业基础课。

面向对象程序设计(oop)是目前程序设计的主流范型,是软件开发人员的必备素质。

面向对象程序设计课程主要阐述面向对象技术程序设计的基本原理和基本技术,经过一个常年的学习,学生应能深刻理解面向对象技术的编程思想和编程方法,掌握面向对象程序设计语言和面向对象设计的思维方式、规则与基本方法,了解面向对象程序设计技术的发展趋势。

二、课程培养目标:知识目标:1、初步掌握基于Windows环境下编程的基本知识,能够阅读相关应用程序;掌握C++的数据类型、运算符和表达式、流程控制语句等基本编程的基础知识。

2、熟练掌握面向对象设计的编程思想,类的定义、类和对象的关系,类的多态等面向对象的高级编程方法;构造函数和析构函数的作用及编写;掌握类的成员的特征及访问方式、友元函数、友元类的定义,作用范围。

3、掌握类的继承和派生的概念及实现,在派生类中的构造函数和析构函数的执行顺序以及基类成员的访问方式;函数的重载、运算符的重载、虚函数等实现多态性的技术技能目标:能够利用VisualC++6.0这个开发平台开发出具备较完善功能的小型软件系统;能够在以后的就业中能从事软件开发、软件测试等相关工作。

素质目标:培养学生掌握面向对象编程的基本编程思想、编程方法,为后续课程奠定坚实的编程基础;全面培养提高学生的逻辑思维能力。

培养学生严谨的思维习惯。

三、选用教材与参考资料教材版本信息:C++面向对象实用教程/郑阿奇主编。

电子工业出版社2009.2教材使用评价:该教材每一章都配有综合应用实例,能够帮助学生进一步消化前面介绍的知识,示例紧跟理论内容,理论与实践联系紧密。

难易适中,非常适合高职学生学习。

选用的参考资料:1、C++语言程序设计(第3版)/吕凤翥著。

电子工业出版社2011.32、C++大学基础教程(第五版)/张引主编。

C试题及答案

C试题及答案

C++程序设计模拟试卷(五)一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。

错选、多选或未选均无分。

1.静态成员函数没有()A.返回值B.this指针C.指针参数D.返回类型答案:B解析:静态成员函数是普通的函数前加入static,它具有函数的所有的特征:返回类型、形参,所以使用静态成员函数,指针可以作为形参,也具有返回值。

静态成员是类具有的属性,不是对象的特征,而this表示的是隐藏的对象的指针,因此静态成员函数没有this指针。

静态成员函数当在类外定义时,要注意不能使用static关键字作为前缀。

由于静态成员函数在类中只有一个拷贝(副本),因此它访问对象的成员时要受到一些限制:静态成员函数可以直接访问类中说明的静态成员,但不能直接访问类中说明的非静态成员;若要访问非静态成员时,必须通过参数传递的方式得到相应的对象,再通过对象来访问。

2.在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是()A.友元函数B.虚函数C.构造函数D.析构函数答案:C解析:定义构造函数作用就是初始化对象,而析构函数释放对象空间。

虚函数用于完成多态性,友元增加访问方便性。

3.所有在函数中定义的变量,都是()A.全局变量B.局部变量C.静态变量D.寄存器变量答案:B解析:变量存储类可分为两类:全局变量和局部变量。

(1)全局变量:在函数外部定义的变量称为全局变量,其作用域为:从定义变量的位置开始到源程序结束。

全局变量增加了函数之间数据联系的渠道,全局变量作用域内的函数,均可使用、修改该全局变量的值,但是使用全局变量降低了程序的可理解性,软件工程学提倡尽量避免使用全局变量。

(2)局部变量:在函数内部定义的变量称为局部变量,其作用域为:从定义变量的位置开始到函数结束。

局部变量包含自动变量(auto)静态变量(static)以及函数参数。

《面向对象程序设计》教学大纲

《面向对象程序设计》教学大纲

《面向对象程序设计》教学大纲课程名称:面向对象程序设计英文名称:Object Oriented Programming)学分:2总学时:36实验(上机)学时: 8开课专业:电子商务专业一、本课程的性质、目的和培养目标面向对象程序设计是电子商务专业的限定选修课程。

面向对象程序设计是当今最为流行的程序设计方法,本课程以C++语言为核心,全面概述面向对象程序设计的基本概念和基本技术。

主要内容包括:理解和掌握面向对象程序设计的基本思想和技术,掌握C++中的引用和函数重载、类与对象、静态成员与友元、运算符重载、继承与派生类、多态与虚函数等重要概念和技术。

通过教学要求学生基本掌握面向对象的程序设计方法,认识C++是如何支持面向对象程序设计的,培养、训练学生运用面向对象技术进行程序设计的能力。

二、预修课程计算机语言与程序设计三、课程内容及学时分配第一章从C语言到C++语言1.C++语言出现的历史背景(OOP思想概述)2.C++中的注释、常量和输入输出3.C++中的变量定义与作用域4.C++中的函数5.C++中的指针与引用本章学时数:4,本章习题数:4第二章类与对象1.类2.对象3.构造函数和析构函数4.对象及其应用5.对象的生存期6.再论程序结构7.面向对象程序设计本章学时数:6,本章习题数:6第三章静态成员与友元1.拷贝构造函数2.静态数据成员3.静态成员函数4.友元函数本章学时数:6,本章习题数:6第四章运算符重载1.运算符重载的概念2.运算符重载举例本章学时数:4,本章习题数:4第五章继承与多态1.继承的概念2.单继承3.多态与虚函数4.类的分解(类的层次设计)5.抽象类与纯虚函数本章学时数:6,本章习题数:6第六章 I/O流库简介1.C++流库的结构2.输入与输出3.格式控制4.文件本章学时数:2,本章习题数:2四、实验(上机)内容和建议学时分配实验1 (4学时)要求:定义类,该类至少应包括静态数据成员和静态成员函数,要求通过本实验掌握定义类的基本方法。

c++自考题库及答案

c++自考题库及答案

c++自考题库及答案C++自考题库及答案1. 问题:C++中的构造函数和析构函数有什么区别?答案:构造函数用于在创建对象时初始化对象,它与类名相同,没有返回类型,且不能被显式调用。

析构函数用于在对象生命周期结束时进行清理工作,它与构造函数名称相同但前面加上波浪号(~),同样没有返回类型,也不能被显式调用。

2. 问题:C++中的类和结构体有什么区别?答案:在C++中,类和结构体在语法上几乎相同,但默认的访问权限不同。

类成员默认是私有的,而结构体成员默认是公开的。

此外,类可以有继承、多态等面向对象的特性,而结构体则没有。

3. 问题:什么是C++中的友元函数?答案:友元函数是一个可以访问类的私有和保护成员的非成员函数。

它通过在类定义中使用`friend`关键字声明。

4. 问题:C++中的运算符重载是什么?答案:运算符重载允许程序员定义或修改已有运算符对用户定义类型(如类或结构体)的操作。

这可以通过运算符函数实现,运算符函数是一个特殊的成员函数或友元函数,它重定义了运算符的行为。

5. 问题:C++中的继承有哪些类型?答案:C++中的继承主要有三种类型:公有继承(public inheritance)、保护继承(protected inheritance)和私有继承(private inheritance)。

公有继承是最常见的形式,基类的公有和保护成员在派生类中仍然是公有和保护的。

保护继承使得基类的公有和保护成员在派生类中变为保护的。

私有继承则将基类的公有和保护成员变为派生类的私有成员。

6. 问题:C++中的多态性是如何实现的?答案:多态性在C++中主要通过虚函数实现。

虚函数允许基类中的函数在派生类中被重写,这样同一个函数调用可以有不同的行为,取决于对象的实际类型。

7. 问题:C++中的模板是什么?答案:模板是C++中一种参数化类型或值的机制,允许程序员编写通用的代码,可以用于不同的数据类型。

模板可以是函数模板或类模板。

C++试题及答案 (五)

C++试题及答案 (五)

C++程序设计模拟试卷(五)一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。

错选、多选或未选均无分。

1。

静态成员函数没有()A。

返回值B. this指针C. 指针参数D。

返回类型答案:B解析:静态成员函数是普通的函数前加入static,它具有函数的所有的特征:返回类型、形参,所以使用静态成员函数,指针可以作为形参,也具有返回值。

静态成员是类具有的属性,不是对象的特征,而this表示的是隐藏的对象的指针,因此静态成员函数没有this 指针。

静态成员函数当在类外定义时,要注意不能使用static关键字作为前缀.由于静态成员函数在类中只有一个拷贝(副本),因此它访问对象的成员时要受到一些限制:静态成员函数可以直接访问类中说明的静态成员,但不能直接访问类中说明的非静态成员;若要访问非静态成员时,必须通过参数传递的方式得到相应的对象,再通过对象来访问.2. 在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是()A. 友元函数B。

虚函数C. 构造函数D. 析构函数答案:C解析:定义构造函数作用就是初始化对象,而析构函数释放对象空间。

虚函数用于完成多态性,友元增加访问方便性。

3。

所有在函数中定义的变量,都是()A. 全局变量B. 局部变量C。

静态变量D. 寄存器变量答案:B解析:变量存储类可分为两类:全局变量和局部变量.(1)全局变量:在函数外部定义的变量称为全局变量,其作用域为:从定义变量的位置开始到源程序结束。

全局变量增加了函数之间数据联系的渠道,全局变量作用域内的函数,均可使用、修改该全局变量的值,但是使用全局变量降低了程序的可理解性,软件工程学提倡尽量避免使用全局变量。

(2)局部变量:在函数内部定义的变量称为局部变量,其作用域为:从定义变量的位置开始到函数结束。

局部变量包含自动变量(auto)静态变量(static)以及函数参数.auto变量意味着变量的存储空间的分配与释放是自动进行的.说明符auto可以省略。

OOP_5

OOP_5
13
5.2 静态函数成员
【例5.6】定义静态函数成员应注意的问题。
class A{ static int a; public: static int g( )const; static int h( )volatile; static A(int ,int); static ~A( ); }; union B{ static int f( ); static int b; static B(int,int); static ~B( ); }
本章内容:
5.1 静态数据成员 5.2 静态函数成员 5.3 静态成员指针 5.4 成员友元
5.5 普通友元
1
5.1 静态数据成员
静态成员包括静态数据成员和静态函数成员, 其有关访问权限的规定和普通成员一样。 静态数据成员用于描述类的总体信息,在类体 内用static声明,只能且必须在类体外定义并初 始化。相当于Java的类变量。 类的总体信息包括类的对象总数、连接所有对 象的链表表头等。在开发基于窗口平台的应用 软件时,可以通过存放窗口链表表头的静态数 据成员维护所有窗口。
8
5.1 静态数据成员
【例5.4】本例说明了全局类静态数据成员的作用域不能局 限于程序文件。
class P{ //定义全局类 int a; static int p; //定义全局类静态数据成员p static int q; static const int r; public: P(int x) { p+=x; } void inc( )const; 问题:const能否省略? }; int P::p=0; static int P::q=0; //错误,不能将P::q局限于文件 const int P::r=0; void P::inc( )const{ //const说明调用inc的对象为只读对象 a++; //错误,不能修改只读对象的普通数据成员

第五章答案类、构造函数、拷贝构造函数、静态成员、友元

第五章答案类、构造函数、拷贝构造函数、静态成员、友元

5.3 练习题解答1.什么是类?为什么说类是一种抽象数据类型的实现?答:类是C++语言中的一种数据类型。

这种数据类型是一种封装体,它既包含有数据结构,又包含有对这些数据所进行的若干操作。

类的获得是通过对于所要解决的问题中的客观实体的抽象,这种抽象不仅包含了它的属性,同时还有对这些属性的操作,即方法。

对实体的这种抽象可用一个标识符来表示,并可对它引用及操作,这种标识符称为类。

可见,类是抽象数据类型的一种实现。

2.类的定义格式如何?类的说明部分和实现部分各包含些什么?答:类的定义格式包含说明部分和定义部分。

类的说明部分主要有类头和类体两部分。

类头定义格式如下所示。

class<类名>其中,class是关键字,<类名>同标识符。

类体是由一对花括号括起来的若干成员,成员中包含数据成员和成员函数,右花括号后边有一个分号。

{〈数据成员说明〉〈成员函数说明〉};成员又分为不同的访问权限,有公有(puLlic)、私有(private)和保护(protected)3种。

类的实现部分是用来定义类中说明的成员函数(没有定义)在该部分定义。

如果类中所有成员函数都已在类体内定义了,则实现部分可以省略。

3.类的成员一般分为哪两部分?这两部分有何区别?答:类的成员一般分为数据成员和成员函数两个部分。

前一部分是用来表示状态的数据,后一部分是用来改变状态的方法(即函数)。

简单地讲,前部分是变量,后部分是函数,后部分的函数是用来对前部分的变量进行操作的。

4.从访问权限角度如何区分不同种类的成员?它们各自的特点是什么?答:从访问权限角度可以将类中成员分为三种:公有的,私有的和保护的。

公有成员可以被类体内外的程序所访问,它通常作为一个类体的对外接口。

私有成员只能对类体内的程序所访问,在类体外是不可见的。

它是类中的被隐藏部分。

保护成员对一般类而言视同私有成员,对派生类同公有成员。

它可以被其派生类中的程序访问。

5.作用域运算符的功能是什么?它的使用格式如何?答:作用域运算符::是C十十语言中的一种运算符,用来指明某个标识符的作用域,主要用于标识类中成员。

OOP--教学日历2013-2014第二学期

OOP--教学日历2013-2014第二学期
实习安排:第4、6、8、10、13、16周,周四7-9节
领导本课程的教师:教研室主任院系负责人
2014年02月18日
3
07/04 ~ 13/04
8
实习
3
派生类与继承(类对象的创建与应用)
3
14/04 ~ 20/04
9
4.3 调整基类成员在派生类中的访问属性的其他方法
4.4 多重继承
4.5 基类与派生类对象之间的赋值兼容关系
3
3
21/04 ~ 27/04
10
实习
3
多态性与虚函数的应用(类对象的创建与应用)
3
28/04 ~ 04/05
24/02 ~ 02/03
2
Chap2C++概述
2.1 C++的起源和特点
2.2 C++源程序的构成
2.3 C++在非面向对象方面的扩充
3
03/03 ~ 09/03
3
Chap 3类和对象
3.1 类与对象的基本概念
3.2 构造函数与析构函数
3.3 对象数组与对象指针
10/03 ~ 16/03
4
实习
3
熟悉VC环境与语法结构(自己写类)
《C++面向对象程序设计教程》(第三版)
陈维兴,林小茶编著 清华大学出版社
2009.06
参考书:
1.《面向对象的理论与C++实践》王燕编著,清华大学出版社,1999
2.《C++面向对象程序设计》(第七版)美Walter Savitch著,周靖 译,清华大学出版社,2010
3.《面向对象程序设计(C++版)》董正言、张聪主编,清华大学出版社,2010.08

《C++程序设计》电子教案第6章 静态成员和友元

《C++程序设计》电子教案第6章  静态成员和友元

6.3 友元类
C++ 允 许 说 明 一 个 类 为 另 一 个 类 的 友 元 类 ( friend class)。 如果A是B的友员类,则A中的所有成员函数可以像友员函 数一样访问B类中的所有成员。定义格式如下: class B { friend class A; //A的所有成员函数均为B的 友元函数 //… } 友元关系不可以被继承。假设类A是类B的友元,而类C从 类B派生,如果没有在类C中显式地使用下面的语句: friend class A; 返回首页
静态数据成员的使用方法如下: (1)静态数据成员的定义与一般数据成员相似,
但前面要加上static关键词。 (2)静;类型> <类名>::<静态数据成员>=<值>; (3)在引用静态数据成员时采用格式: <类名>::<静态数据成员> (4)静态数据成员是静态存储的,它是静态生 存期,必须对它进行初始化。

//声明友元
void display(person* a) //定义友员函数 { cout<<a->name<<a->age<<endl; } void main() { person demo("dsc",30); display(&demo); //调用友员函数,不要指明 对象名 } 运行结果为: dsc30
返回本节
6.2 友元函数

6.2.1 友元函数的说明 6.2.2 友元函数的使用
返回首页
6.2.1 友元函数的说明
定 义友 元 函数 的 方式 是在 类 定义 中 用关 键 词 friend说明该函数,其格式如下: friend <类型> <友元函数名>(<参数表>);

c++期末考试试题

c++期末考试试题

c++期末考试试题一、选择题(每题2分,共20分)1. 在C++中,以下哪个关键字用于定义类?A. structB. classC. enumD. union2. 以下哪个操作符用于实现多态?A. &B. *C. newD. virtual3. C++中,以下哪个函数是用于删除动态分配的内存?A. deleteB. freeC. mallocD. new4. 以下哪个是C++中的引用类型?A. intB. floatC. doubleD. string&5. 在C++中,以下哪个是正确的函数重载声明?A. void func(int a);B. void func(int a) { return; }C. int func(int a) { return a; }D. void func(int a) {}6. C++中,以下哪个是正确的友元函数声明?A. friend void func();B. friend int func();C. friend class func;D. friend void func(int a);7. C++中,以下哪个是正确的模板类声明?A. template <typename T> class MyClass;B. class template <typename T> MyClass;C. class MyClass template <typename T>;D. template <typename T> class;8. 在C++中,以下哪个是正确的继承方式?A. class Derived : public Base;B. class Derived : Base;C. class Derived = public Base;D. class Derived public Base;9. C++中,以下哪个是正确的构造函数初始化列表使用方式?A. MyClass() : a(0), b(0) {}B. MyClass() { a = 0; b = 0; }C. MyClass() : a = 0, b = 0;D. MyClass() : a(0) { b = 0; }10. 在C++中,以下哪个是正确的异常处理语句?A. try { ... } catch (Exception e) { ... }B. try { ... } catch (Exception) { ... }C. try { ... } catch (e) { ... }D. try { ... } catch { ... }二、简答题(每题5分,共20分)1. 简述C++中构造函数和析构函数的作用及其区别。

vlookup格式不对匹配不出来

vlookup格式不对匹配不出来

vlookup格式不对匹配不出来可能有五个原因:1、应用的目标列和被应用的目标列数据类型不一致。

2、套用的目标单元格的值前后有空格。

3、目标套用列没有位于第一列。

4、第三个参数不正确。

5、数据表存在合并单元格。

扩展资料:一,VLOOKUP函数。

1,主要功能:在数据表的首列查找指定的数值,并由此返回数据表当前行中指定列处的数值。

2,使用格式:VLOOKUP(lookup_value,table_array,col_index_num,range_looku p)。

3,参数说明:Lookup_value代表需要查找的数值;Table_array 代表需要在其中查找数据的单元格区域;Col_index_num为在table_array区域中待返回的匹配值的列序号(当Col_index_num为2时,返回table_array第2列中的数值,为3时,返回第3列的值……);Range_lookup为一逻辑值,如果为TRUE或省略,则返回近似匹配值,也就是说,如果找不到精确匹配值,则返回小于lookup_value的最大数值;如果为FALSE,则返回精确匹配值,如果找不到,则返回错误值#N/A。

4,特别提醒:Lookup_value参见必须在Table_array区域的首列中;如果忽略Range_lookup参数,则Table_array的首列必须进行排序;在此函数的向导中,有关Range_lookup参数的用法是错误的。

可能有以下几个原因:1、应用的目标列和被应用的目标列数据类型不一致。

2、套用的目标单元格的值前后有空格。

3、目标套用列没有位于第一列。

4、第三个参数不正确。

5、数据表存在合并单元格。

扩展资料:函数是指一段在一起的、可以做某一件事儿的程序。

也叫做子程序、(OOP中)方法。

一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。

所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。

C++知识点总结

C++知识点总结

类和对象初步1.类的定义在定义外成员函数的实现2.类的成员函数之间可以相互调用,类的成员函数也可以重载,也可设默认参数值3.一般来讲,一个对象占用的内存空间的大小等于其成员变量的体积之和。

每个对象都有自己的存储空间(成员变量),但成员函数只有一份对象名.成员名指针->成员名引用名。

成员名4.private:一个类的私有成员,只能在该类的成员函数中才能访问public: proteced:5.class默认private struct默认public6.内联成员函数:成员函数名前加inline 或函数体写在类定义内部的成员函数.执行更快,但会带来额外的内存开销构造函数1.构造函数全局变量在堆上,系统自动初始化为零。

局部变量在栈上,初始值是随机的,需要初始化。

2.构造函数:对对象进行初始化。

构造函数执行时对象的内存空间已经分配,构造函数的作用是初始化这片空间.可重载,不写的话有默认构造函数,但是如果编写了构造函数,那默认构造函数不会再执行。

是一类特殊的成员函数。

不写返回值类型,函数名为类名.3.对象在生成时一定会调用某个构造函数,一旦生成,不再执行构造函数。

4.P183 Ctest *pArray[3]={new Ctest(4),new Ctest(1,2)}5.复制构造函数:其是构造函数的一种,只有一个参数,为本类的引用,防止混淆,构造函数不能以本类的对象作为唯一的参数。

默认复制构造函数。

6.复制构造函数被调用的三种情形:1用一个对象去初始化另一个对象时Complex C1(C2) ComplexC2=C1;2 函数的参数是类A的对象。

形参未必等于实参函数中用对象的引用不会调用复制构造函数void Function(const Complex &c)3 函数的返回值是类A的对象7.类型转换构造函数:除复制构造函数外,只有一个参数的构造函数C=68.析构函数:在对象消亡时调用,可以定义其做善后工作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

不是成员函数,但大 学 信 息 学 院
3、友元的分类
•友元函数:定义在类的外部,一般与类的 成员函数定义放在一起 •友元类:友元类的每个成员函数都可以访 问另一个类的保护或者私有数 据成员
19
15.3.1 友元函数
例15.4:分析下列程序的输出结果。 #include <iostream.h> 江 class Time 西 财 { 经 大 public: 学 Time(int new_hours,int new_minutes) 信 {hours=new_hours;minutes=new_minutes;} 息 学 friend void Time12(Time time); 院 friend void Time24(Time time); 友元函数的说明 private: int hours,minutes; }; void Time12(Time time) 友元函数的定义 20 {
weight=w; totalWeight+=w;
16
15.2 静态成员函数(续)
int Goods::totalWeight=0; void main() { 结果: int w; please input a weight value cout<<“please input a weight value”<<endl; 12 cin>>w; please input an other weight value 12 Goods g1(w); 24 cin>>w; Goods g2(w); cout<<Goods::TotalWeight()<<endl; 17 }
对多个对象来说,静态数据成员只存储在一个地 方,供所有对象使用; 静态数据成员的值对每个对象都是一样的,但 其值可以被任何一个对象更新; 静态数据成员的不在类声明中定义,而是在类 的实现部分中定义。
2
2、使用方法
江 西 财 经 大 学 信 息 学 院
•静态数据成员在定义或说明时前面加上关 键字static;
11
15.2 静态成员函数(续)
例15.2:分析下列程序的输出结果。 #include <iostream.h> 江 西 class M 财 经 { 大 学 public: 信 M(int a) {A=a;B+=a;} 息 学 static void f1(M m); //公有静态成员函数 院 private: int A; static int B; //私有静态数据成员Sum }; 12 void M::f1(M m) //静态成员函数体
} void Time24(Time time) 友元函数的定义 { cout<<time.hours<<“:”<<time.minutes<<endl; 21 }
江 西 财 经 大 学 信 息 学 院
void main() { Time time1(20,30),time2(10,45); Time12(time1); Time12(time2); 友元函数的调用 Time24(time1); Time24(time2); } 8:30 PM 输 10:45 AM 20:30 出 10:45
15.4 对象的生存期(续)
例5.13:分析下列程序的输出结果。 #include <iostream.h> 江 class A 西 财 { 经 大 public: 学 A(char *st); 信 ~A(); 息 学 院 private: char string[50]; }; A::A(char *st) { strcpy(string,st); 27 cout<<“Constructor called for “<<string<<endl;
15
15.2 静态成员函数(续)
江 西 财 经 大 学 信 息 学 院
} Goods::~Goods() { totalWeight-=weight; } int Goods::Weight() { return weight; } int Goods::TotalWeight() { return totalWeight; }
15.3.2 友员类(续)
江 西 财 经 大 学 信 息 学 院
class Y { public: Y(int i,int j); void Display(); private: 子对象,类X的对象a作为类Y的数据成员 X a; }; int X::y=1; Y::Y(int i,int j) { a.x=i; 类Y中访问类X的私有数据成员x和y; X::y=j; 24 }
15.1 静态数据成员(续)
Myclass::Myclass(int a,int b,int c) { A=a; 江 B=b; 西 C=c; 财 经 Sum+=A+B+C;} 大 学 void Myclass::GetNumber() 信 息 { 学 cout<<“Number=“<<A<<“,”<< 院 B<<“,” <<C<<endl; } void Myclass::GetSum() { cout<<“Sum=“<<Sum<<endl; }
第15章 静态成员和友元
江 西 财 经 大 学 信 息 学 院
目的:
解决数据共享问题,即不通过全局
对象,而实现多个对象之间的数据共享。
静态成员包括:静态数据成员
静态成员函数
1
15.1 静态数据成员
1、静态数据成员
江 西 财 经 大 学 信 息 学 院
是类的所有对象共享的成员,而不是某个对象的 成员;

9
15.2 静态成员函数
1、作用 江 操作静态数据成员; 西
财 经 大 学 信 息 学 院
2、使用格式 <类名>::<静态成员函数名>(<参数表>) 3、说明 静态成员函数类与类相联系,不与类的对 象相联系,访问静态成员函数不需要对象。
10
3、注意事项
江 西 财 经 大 学 信 息 学 院
• 静态成员函数的实现中不能直接引用类中说 明的非静态成员,可以引用类中说明的静 态成员; • 静态成员函数中要引用非静态成员时,可 以通过对象来引用;
15.3.1 友元函数(续)
22
15.3.2 友员类
例15.5:分析下列程序的输出结果。 #include <iostream.h> 江 class X 西 { 财 经 友元类 friend class Y; 大 学 public: 信 息 void Set(int i) {x=i;} 学 void Display() 院 {cout<<“x=“<<x<<“,”<<“y=“<<y<<endl;} private: int x; static int y; 23 };
15.4 对象的生存期
江 西 财 经 大 学 信 息 学 院
1、对象的生存期 指对象从被创建开始到被释放为止的时间; 2、按生存期对对象的分类
局部对象:被定义在一个函数体或程序块内,作用域小, 生存期短;
静态对象:被定义在一个文件中,它的作用域从定义时起到 文件结束时止;它的作用域较大,生存期也较长; 全局对象:被定义在某个文件中,它的作用域在包含该文件 的整个程序中;它的作用域最大,生存期最长; 26
江 西 财 经 大 学 信 息 学 院
15.3 友元
1、为什么引入友元 在对某些成员函数多次调用时,由于参数传递、
江 西 财 经 大 学 信 息 学 院
类型检查和安全性检查等都需要时间开销,从而影响 了程序的运行效率,引入友元后可以提高程序的运行
效率;
2、使用格式 是一种定义在类外部的普通函数,但需要在类体 内进行说明(函数前面加friend关键字);
江 西 财 经 大 学 信 息 学 院
#include <iostream.h> class Goods { public: Goods(int w); 货物购进 ~Goods(); 货物卖出 int Weight(); static int TotalWeight(); private: int weight; static int totalWeight; 现有库存 }; Goods::Goods(int w) {
静态数据成员的较多使用场合:
江 西 财 经 大 学 信 息 学 院
(1)用来保存流动变化的对象个数; (2)作为一个标志,指示一个特定的动作是 否发生; (3)一个指向一个链表第一个成员或最后一 个成员的指针
6
15.1 静态数据成员(续)
例15.1:分析下列程序的输出结果。 #include <iostream.h> class Myclass 江 Myclass类 西 { 财 对象e 经 对象a public: 大 学 Myclass(int a,int b,c); Sum 信 息 void GetNumber(); 学 void GetSum(); 院 private: 对象i 对象z int A,B,C; static int Sum; //私有静态数据成员Sum }; 7 int Myclass::Sum=0; //静态数据成员Sum初始化
15.3.2 友员类(续)
void Y::Display() { cout<<“x=“<<a.x<<“,”; 类Y中访问类X的私有 江 西 cout<<“y=“<<X::y<<endl; 数据成员x和y; }财 经 大 void main() 输出: {学 信 息 X b; x=5,y=1 学 x=6,y=9 院 b.Set(5); x=5,y=9 b.Display(); Y c(6,9); c.Display(); b.Display(); 25 }
相关文档
最新文档