文档库 最新最全的文档下载
当前位置:文档库 › C++中静态成员函数访问非静态成员变量

C++中静态成员函数访问非静态成员变量

C++中静态成员函数访问非静态成员变量
C++中静态成员函数访问非静态成员变量

C++中静态成员函数访问非静态成员变量

这两天写一个简单的程序,由于程序运行占用cpu比较厉害,导致运行中界面窗口无法交互,因此想到了多线程,以前没有接触过mfc多线程,在网上看了两篇文章,觉得也不过如此,就开始动手写了,结果发现即使是看别人写很简单,自己动手也会出现很多问题,哪怕是看起来真的很简单的问题。

这里遇到的问题就是由于多线程的函数必须是static的,然后需要在里面调用non-static的函数,我就没有办法了,于是又开始网上找资料,下面就将这篇文章转贴过来,供大家学习思考:先看一个class class a { public:

static FunctionA() {

menber = 1; } private: int menber; }

编译上述代码,出错。原因很简单大家都知道,静态成员函数不能访问非静态成员,这是因为静态函数属于类而不是属于整个对象,静态函数中的 member可能都没有分配内存。静态成员函数没有隐含的this自变量。所以,它就无法访问自己类的非静态成员。(看过一篇很好的文章《浅析C++中的this指针》介绍这个方面的详细内容)那要想访问怎么办呢?地球人都知道只要将: int menber;

//change the line above to: static int menber;

但是这个方法让我们不得不将static function内用到的成员变量都变成static的了,而且static 的成员还要显式初始化,有没有更好的方法?答案是肯定的。如下: class a { public:

static FunctionA(a* _a) {

a-> menber = 1; (window.cproArray = window.cproArray || []).push({ id: "u2280119" }); } private: int menber; }

前提是这个类要分配了内存空间。其实这里我做的就是将一个对象指针作为静态成员函数的“this”指针,意在模仿传递非静态成员函数里this变量。

静态函数

C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。 4)栈——增长方向:自顶向下增长;自动变量以及每次函数调用时所需要保存的信息(返回地址;环境信息)。 5)堆——动态存储分。 在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化) 3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。 好处: 定义全局静态变量的好处: <1>不会被其他文件所访问,修改 <2>其他文件中可以使用相同名字的变量,不会发生冲突。 局部静态变量 在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。1)内存中的位置:静态存储区 2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化) 3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,

作用域随之结束。 注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。 当static用来修饰全局变量的时候,它就改变了全局变量的作用域(在声明他的文件之外是不可见的),但是没有改变它的存放位置,还是在静态存储区中。 3.静态函数 在函数的返回类型前加上关键字static,函数就被定义成为静态函数。 函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。 定义静态函数的好处: <1>其他文件中可以定义相同名字的函数,不会发生冲突 <2>静态函数不能被其他文件所用。存储说明符auto,register,extern,static,对应两种存储期:自动存储期和静态存储期。auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。 关键字extern和static用来说明具有静态存储期的变量和函数。用static声明的局部变量具有静态存储持续期(static storage duration),或静态范围(static extent)。虽然他的值在函数调用之间保持有效,但是其名字的可视性仍限制在其局部域内。静态局部对象在程序执行到该对象的声明处时被首次初始化。 由于static变量的以上特性,可实现一些特定功能。 1.统计次数功能 声明函数的一个局部变量,并设为static类型,作为一个计数器,这样函数每次被调用的时候就可以进行计数。这是统计函数被调用次数的最好的办法,因为这个变量是和函数息息相关的,而函数可能在多个不同的地方被调用,所以从调

C++类中的静态成员变量和静态成员函数的作用

数据成员可以分静态变量、非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员. 非成静态员:所有没有加Static的成员都是非静态成员,当类被实例化之后,可以通过实例化的类名进行访问..非静态成员的生存期决定于该类的生存期..而静态成员则不存在生存期的概念,因为静态成员始终驻留在内容中.. 一个类中也可以包含静态成员和非静态成员,类中也包括静态构造函数和非静态构造函数.. 分两个方面来总结,第一方面主要是相对于面向过程而言,即在这方面不涉及到类,第二方面相对于面向对象而言,主要说明static在类中的作用。 一、在面向过程设计中的static关键字 1、静态全局变量 定义:在全局变量前,加上关键字static 该变量就被定义成为了一个静态全局变量。 特点: A、该变量在全局数据区分配内存。 B、初始化:如果不显式初始化,那么将被隐式初始化为0(自动变量是随机的,除非显式地初始化)。 C、访变量只在本源文件可见,严格的讲应该为定义之处开始到本文件结束。 例(摘于C++程序设计教程---钱能主编P103)://file1.cpp //Example 1 #include void fn(); static int n; //定义静态全局变量 void main() {

n=20; cout <

C++综合练习 (带答案)

C++面向对象 程序设计习题册 姓名 学号 学院 班级

第三章类和对象 一、选择题 1. 在一个类的定义中,包含有(C )成员的定义。 A. 数据 B. 函数 C. 数据和函数 D. 数据或函数 2. 在类作用域中能够通过直接使用该类的(D)成员名进行访问。 A. 私有 B. 公用 C. 保护 D. 任何 3. 假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为(D)。 A. x(a) B. x[a] C. x->a D. x.a 4. 假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为(B )。 A. x.a B. x.a() C. x->a D. x->a() 5. 假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为(C )。 A. px(a) B. px[a] C. px->a D. px.a 6. 假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为(D)。 A. x.a B. x.a() C. x->GetValue() D. x.GetValue() 7. 假定AA为一个类,int a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为(A)。 A. int AA::a() B. int AA:a()

C. AA::a() D. AA::int a() 8. 假定AA为一个类,a为该类公有的数据成员,若要在该类的一个成员函数中访问它,则书写格式为(A )。 A. a B. AA::a C. a() D. AA::a() 9. 若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字( B )放在函数原型或函数头的前面。 A. in B. inline C. inLine D. InLiner 10. 在多文件结构的程序中,通常把类的定义单独存放于(D )中。 A. 主文件 B. 实现文件 C. 库文件 D. 头文件 11. 在多文件结构的程序中,通常把类中所有非内联函数的定义单独存放于(B)中。 A. 主文件 B. 实现文件 C. 库文件 D. 头文件 12. 在多文件结构的程序中,通常把含有main()函数的文件称为(A )。 A. 主文件 B. 实现文件 C. 程序文件 D. 头文件 13. 在C++程序中使用的cin标识符是系统类库中定义的( A)类中的一个对象。 A. istream B. ostream C. iostream D. fstream 14. 在C++程序中使用的cout标识符是系统类库中定义的( B )类中的一个对象。 A. istream B. ostream C. iostream D. fstream 15. 假定AA是一个类,abc是该类的一个成员函数,则参数表中隐含的第一个参数的类型为(D)。 A. int B. char C. AA D. AA*

实验八 静态数据成员和静态函数成员

实验八静态数据成员和静态函数成员 任务一: 1、了解多文件工程 本次实验需要创建一个工程,此工程由三个文件组成 1)头文件client.h ——类的声明 2)源文件client.cpp——成员函数的定义 3)源文件test.cpp——main()函数的定义 2、了解CLIENT类 本次实验的主角是CLIENT(客户机)类。在实际生活中,计算机网络的应用模式为client/server(客户机/服务器)模式。情况很简单,即多台客户机与一台服务器连接,服务器为客户机提供服务。 3、实验任务 1)阅读程序代码,仔细分析CLIENT类的各数据成员及函数成员,写出分析结果 2)创建多文件工程,编译并运行 3)为main()函数的各条语句增加注释 4)将数据成员ServerName改为非静态,其它类成员的静态属性不变。 修改程序代码,使客户机a连接到另一台服务器M。(b仍与N连接) 任务二: 生成一个储蓄类CK。用静态数据成员表示每个存款人的年利率lixi。类的每个对象包含一个私有数据成员cunkuan,表示当前存款额。提供一个calLiXi()成员函数,计算利息,用cunkuan乘以lixi除以12取得月息,不计复利,并将这个月息加进cunkuan中。提供设置存款额函数set()。提供一个静态成员函数modLiXi(),可以将利率lixi修改为新值。 实例化两个不同的CK对象saver1和saver2,结余分别为2000.0和3000.0。将lixi设置为3%,计算一个月后和3个月后每个存款人的结余并打印新的结果。 首先定义储蓄类CK,它包含一个私有数据成员cunkuan,数据类型为double,一个静态数据成员年利率lixi,数据类型也为double;包含一个成员函数calLiXi()和一个静态成员函数modLiXi(),其中modLiXi()应含有一个表示要更改的年利率的新值的参数。 完善程序: #include class CK{ double cunkuan; public: ? //定义静态数据成员lixi CK(double c){?}//构造函数 void set(double x){?}//设置存款额 ? //定义静态成员函数modLiXi() void calLiXi(int m=1); };

C笔试试卷A卷答案解析

C笔试试卷A卷答案解 析 集团文件版本号:(M928-T898-M248-WU2669-I2896-

考试中心填写: 湖南大学课程考试试卷 课程名称:高等程序设计;课程编码:试卷编号:;考

A. 不能带有参数 B. 最多只能带有2个参数 C. 只能带有一个参数 D. 可以带多个参数 析:记住,类型转换函数有三个特点:1必须是成员函数2无返回类型3无参数 4.静态成员函数没有( B )。 A. 返回值 B. this指针 C. 指针参数 D. 返回类型 析:故静态成员函数不能访问类的一般成员(静态成员除外)5.定义类模板时要使用关键字( D )。 A. const B. new C. delete D. template 6.下列不具有访问权限属性的是( A )。 A. 非类成员 B. 类成员 C. 数据成员 D. 函数成员 析:答案显然,但非类成员可能能访问类成员,如友元函数7.C++语言鼓励程序员在程序设计时将( C )。 A. 数据和操作分别封装 B. 不同类型的数据封装在一起 C. 数据和操作封装在一起 D. 不同作用的操作封装在一起

8.所谓多态性是指( B )。 A. 不同的对象调用不同名称的函数 B. 不同的对象调用 相同名称的函数 C. 一个对象调用不同名称的函数 D. 一个对象调用不 同名称的对象 9.解决二义性问题的方法有( C )。 A. 只能使用作用域分辨操作符 B. 使用作用域分辨操作符或赋值兼容规则 C. 使用作用域分辨操作符或虚基类 D. 使用虚基类或赋值兼容规则 10.如果在类CTest的外面函数调用CTest::f();则函数f()是类CTest的( A )。 A. 静态成员函数 B. 非静态成员函数 C. 友元函数 D. 前面都不正确 析:友元函数不输入类成员,故不能那样调用。 11.对虚基类的定义,( B )。 A. 不一定要使用虚函数 B. 必须使用虚函数 C. 必须使用private D. 必须使用public 12.假定CTest为一个类,并且构造函数的参数无缺省值,则执行CTest objTest语句时将自动调用该类的( A )。

两个随机变量和与商的分布函数和密度函数

设(X ,Y )的联合密度函数为f (x ,y ),现求Z=X+Y 的概率密度。 令{(,)|}z D x y x y z =+≤,则Z 的分布函数为: (){} {}(,)((,))Z D z z y F z P Z z P X Y z f x y dxdy f x y dx dy +∞--∞ -∞ =≤=+≤==??? ? (1.1) 固定z 和y 对积分 (,)z y f x y dx --∞ ?作换元,令x y u +=,得 (,)(,)z y z f x y dx f u y y du --∞ -∞ =-?? (1.2) 于是 ()(,)[(,)]z z Z F z f u y y dudy f u y y dy du +∞+∞ -∞-∞ -∞ -∞ =-=-???? (1.3) 由概率论定义,即得Z 的概率密度为 ()(,)Z f z f z y y dy +∞-∞ =-? (1.4) 由X 与Y 的对称性,又可得 ()(,)Z f z f x z x dx +∞-∞ =-? , (1.5) 特别的,当X 与Y 相互独立时,有 ()()()()()Z X Y X Y F z f z y f y dx f x f z x dx +∞ +∞ -∞ -∞ =-=-? ? (1.6) 其中,()X f x 、()Y f y 分别是X 和Y 的密度函数。 式(1.6)又称为()X f x 和()Y f y 的卷积,常记为*()X Y f f z 。因此式(1.6)又称为独立和分布的卷积公式。

设(X ,Y )的联合密度函数为f (x ,y ),又X Z Y =,现求X Z Y =的概率密度,Z 的分布函数为 1 2 (){} (,)(,)Z D D F z P Z z f x y dxdy f x y dxdy =≤=+???? (2.1) 而 1 (,)(,)yz D f x y dxdy f x y dxdy +∞ -∞=?? ? ? (2.2) 对于固定的z ,y ,积分 (,)yz f x y dx -∞ ?作换元x u y = (这里y>0),得 (,)(,)yz z f x y dx yf yu y du -∞ -∞ =?? (2.3) 于是 01 (,)(,)(,)z D z f x y dxdy yf yu y dudy yf yu y dydu +∞-∞+∞ -∞==????? ? (2.4) 类似的可得 2 (,)(,)(,)yz D z f x y dxdy f x y dxdy yf yu y dydu +∞ -∞-∞-∞ ==-??? ? ? ? (2.5) 故有 12 0()(,)(,)[(,)(,)][(,)]Z D D z z F z f x y dxdy f x y dxdy yf yu y dy yf yu y dy du y f yu y dy du +∞-∞ -∞ +∞-∞-∞ =+=-=?????? ? ?? (2.6) 有概率密度定义可得X Z Y = 的概率密度为 ()(,)Z f z y f yz y dy +∞ -∞ =? (2.7) 特别的,当X 与Y 相互独立时,有 ()()()Z X Y f z y f yz f y dy +∞-∞ =? (2.8)

C++复习题 (1)

练习一 1、C++语言中的每条基本语句以 ; 作为结束符,每条复合语句以 } 作为结束符。 2、C++语言中可以实现输出一个换行符并刷新流功能的操控符是___cout<

练习2 1、float 和double 类型的大小分别为 4字节和 8字节。 2、算术表达式(xy2 /3a)+4b-1 对应的C++表达式为(x*y*2)/(3*a)+4*b-1。 3、关系表达式x+y>5的相反表达式为x+y<=5。 4、在C++中,声明布尔类型变量所用的关键字是____bool ____。 5、假定一个一维数组的定义为“char * a[8] ;”,则该数组所含元素的个数为 8 ,所占存储空间的字节数为 8 。 6.假定一个结构类型定义为 “struct D { int a ; union { int b ; double c ; } ; D * d[2] ; } ;”, 则该类型的大小为 20 字节。 7.设"int a=3,b=4,c=5;",表达式"(a+b)>c&&b==c"的值是0。 8.#include _____指令指示编译器将一个源文件嵌入到带该指令的源文件之中。 9.举出C++中两种用户自定义的数据类型:struct、class 。 10. C++中没有字符串类型,字符串是通过字符数组来表示的,每一个字符串都有一个结尾字符\0。 11.编程完成以下功能:用户输入两个整数a,b,进行两int型数的比较,当a>b 时返回值1;当a==b时返回值0;当a

静态成员函数一般情况下只能访问静态成员变量

静态成员函数一般情况下只能访问静态成员变量,因为不接受隐含的this指针。另外作为类的静态成员函数,不用声明对象,便可直接调用,例如类A的静态成员函数fun(); A::fun(); 1、主要用于封装全局变量和全局函数。以避免在文件作用域内包含带外部连接的数据。 例如全局变量:int path;int para1; 解决办法:设计一个全局类,并将这些全局名称声明为静态变量,并编写静态函数来调用这些变量。 class Global{ static int s_path; static int s_para; private: Global();//不实现,避免无意中的实例化 public: //manipulators static void setPath(int path){s_path = path;} static void setPara(int para){s_para = para;} //accessors static int getPath(){return s_path;} static int getPara(){return s_para;} } 2、对自由函数的封装 在.h文件的文件作用域内避免使用自由函数(运算符函数除外);在.c文件中避免使用带有外部连接的自由函数,因此可以使用静态成员函数进行处理。 例如:int getPara();int getPath();我们可以通过声明一个结构的静态方法代替: struct SysUtil{ static int getPath(); static int getPara(); }这样,唯一有冲突危险的就是出现类名SysUtil了。

static变量和static函数的各自的特点

static变量和static函数的各自的特点 static变量大致分为三种用法 一、用于局部变量中,成为静态局部变量. 静态局部变量有两个用法,记忆功能和全局生存期. 二、用于全局变量,主要作用是限制此全局变量被其他的文件调用. 三、用于类中的成员.表示这个成员是属于这个类但是不属于类中任意特定对象 static 声明的变量. 在C语言中有两方面的特征: 1、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。 2、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。 Tips: A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度; B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度; C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题; D.如果我们需要一个可重入的函数,那么,我们一定

要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数) E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。 函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。 扩展分析:术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。

C++静态成员函数小结

C++静态成员函数小结 一静态数据成员 (1) 1.静态数据成员的定义 (1) 2.静态数据成员被类的所有对象所共享(包括该类派生类的对象) (2) 3.静态数据成员可以成为成员函数的可选参数(普通数据成员则不可以) (2) 4.静态数据成员的类型可以是所属类的类型(普通数据成员则不可以) (3) 5.静态数据成员的值在const成员函数中可以被合法的改变 (3) 二静态成员函数 (3) 1.静态成员函数的地址可用普通函数指针储存(普通成员函数地址需要用类成员函数 指针来储存) (4) 2.静态成员函数不可以调用类的非静态成员 (4) 3.静态成员函数不可以同时声明为virtual、const、volatile函数 (4) 类中的静态成员真是个让人爱恨交加的特性。我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动。 静态类成员包括静态数据成员和静态函数成员两部分。 一静态数据成员 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态数据成员还具有以下特点: 1.静态数据成员的定义 静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义(初始化)不应该被放在头文件中。其定义方式与全局变量相同。举例如下: xxx.h文件 class base{ private: static const int _i;//声明,标准c++支持有序类型在类体中初始化,但vc6不支持。 }; xxx.cpp文件 const int base::_i=10;//定义(初始化)时不受private和protected访问限制. 注:不要试图在头文件中定义(初始化)静态数据成员。在大多数的情况下,这样做会引起重复定义这样的

随机变量的特征函数

第四章 大数定律与中心极限定理 4.1特征函数 内容提要 1. 特征函数的定义 设X 是一个随机变量,称)()(itX e E t =?为X 的特征函数,其表达式如下 (),()().(), 在离散场合, 在连续场合,itx i i itX itx x e P X x t E e t e p x dx ?+∞-∞ ?=?==-∞<<+∞???∑? 由于1sin cos 22=+=tx tx e itx ,所以随机变量X 的特征函数)(t ?总是存在的. 2. 特征函数的性质 (1) 1)0()(=≤??t ; (2) ),()(t t ??=-其中)(t ?表示)(t ?的共 轭; (3) 若Y =aX +b ,其中a ,b 是常数.则);()(at e t X ibt Y ??= (4) 若X 与Y 是相互独立的随机变量,则);()()(t t t Y X Y X ????=+ (5) 若()l E X 存在,则)(t X ?可l 次求导,且对l k ≤≤1,有);()0()(k k k X E i =? (6) 一致连续性 特征函数)(t ?在),(+∞-∞上一致连续 (7) 非负定性 特征函数)(t ?是非负定的,即对任意正整数n ,及n 个实数 n t t t ,,,21 和n 个复数n z z z ,,21,有 ;0)(11≥-∑∑==j k j n k n j k z z t t ? (8) 逆转公式 设F (x )和)(t ?分别为X 的分布函数和特征函数,则对F (x )的任意两个点21x x <,有

=-+--+2)0()(2)0()(1122x F x F x F x F ;)(21 lim 2 1dt t it e e T T itx itx T ?π?-+∞→- 特别对F (x )的任意两个连续点21x x <,有 ;)(21 lim )()(2 112dt t it e e x F x F T T itx itx T ?π ?-+∞→-=- (9) 唯一性定理 随机变量的分布函数有其特征函数唯一决定; (10) 若连续随机变量X 的密度函数为p (x ),特征函数为).(t ?如果 +∞

c++期末复习题

一、填空题(每空1分,共15分,将正确答案写在()中) ++中有两种数据类型:( 整型)和( 字符型)可以使用signed修饰符。 在C++中,用数组、指针、和( 引用)作为函数参数,能够将参数值带回。 2.为了降低函数调用的时间开销,建议将小的调用频繁的函数定义为(内联函数),方法是在函数类型前加上(inline)关键字。 3.面向对象的程序设计有四大特征,它们是抽象、封装、( 继承)、( 多态)。 4.拷贝构造函数是在用一个对象初始化另一个对象时被调用,系统缺省的拷贝构造函数的工作方法是( 拷贝每一个数据成 员)。或逐一拷贝 5.用new申请某一个类的动态对象数组时,在该类中必须能够匹配到(默认)构造函数,否则应用程序会产生一个编译错 误。 6.静态数据成员必须在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象( 共享)。 7.在C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型( 有一个不同)。 8.在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向对象程序设计的( 封装)特性。 9.预编译指令由三种,它们是:文件包含、( 宏定义)(条件编译) 10.静态的成员函数没有隐含的( this指针),所以,它们只能直接访问类的静态的数据成员。 11.在C++中,函数的参数有两种传递方式,它们是值传递和( 引用传递)。 12.当非静态成员函数被调用时,该成员函数的( this指针)指向调用它的对象。 13.拷贝构造函数使用( 一个已经存在的对象)作为参数初始化创建中的对象。 14.在公有继承的情况下,基类数据成员在派生类中的访问权限( 保持不变)。 15.在C++中,构造派生类对象时,总是先从(基类)的初始化开始的。 16.当需要统计程序中某个类创建对象的个数时,需要给该类定义(静态数据 )成员。 17.在多个类之间有重复继承时,为避免被重复继承的基类数据成员在内存中有多个拷贝,应将该基类定义为(虚基 类)。 18.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为( 抽象类),定义该类至少具有一个(纯虚函数)。 19.在C++中构造一个对象时,其数据成员在构造函数中初始化。对于内嵌的对象、( 常量)( 基类)数据成员需要在构造 函数的成员初始化列表中初始化。 20.在类的定义中,说明为protected的数据成员称为保护成员。保护数据成员具有双重作用:对于其派生类而言,(是公 有的);而对于其外部的程序而言,( 是私有的)。 21.控制格式输出的操纵符中,(setprecision )是设置数据精度的,(hex )是设置十六进制的。 22.如果s是int型变量,且s=6,则下面s%2+(s+1)%2表达式的值为___1 _。 23.已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=’a’+4’的值为__ e__。 24.数组与函数参数联系密切,当用数组元素作函数参数时,这是属于值传递;当数组名作为参数时,这是属于引用传递,对形参的改变可影响到实参。 25.成员变量”形式访问的对象成员仅限于被声明为public的成员;若要访问其他成员变量,需要通过成 员函数或友元函数函数。 26.一个__类__和_对象__的关系,正如基本数据类型与该类型的变量一个。 27.类成员的默认访问方式是__私有_ __. 28.一个类有_多个_个构造函数,有___一个__析构函数。 29.类的__静态__成员函数不能对类中的非静态成员进行默认访问。 30.如果说明类B是类A的友元类,则类B的所有成员函数都是类A的__友元函数____。 31.利用成员函数对二元运算符重载,其左操作数为this 指针右操作数为成员函数参数。

C++中静态成员函数访问非静态成员变量

C++中静态成员函数访问非静态成员变量 这两天写一个简单的程序,由于程序运行占用cpu比较厉害,导致运行中界面窗口无法交互,因此想到了多线程,以前没有接触过mfc多线程,在网上看了两篇文章,觉得也不过如此,就开始动手写了,结果发现即使是看别人写很简单,自己动手也会出现很多问题,哪怕是看起来真的很简单的问题。 这里遇到的问题就是由于多线程的函数必须是static的,然后需要在里面调用non-static的函数,我就没有办法了,于是又开始网上找资料,下面就将这篇文章转贴过来,供大家学习思考:先看一个class class a { public: static FunctionA() { menber = 1; } private: int menber; } 编译上述代码,出错。原因很简单大家都知道,静态成员函数不能访问非静态成员,这是因为静态函数属于类而不是属于整个对象,静态函数中的 member可能都没有分配内存。静态成员函数没有隐含的this自变量。所以,它就无法访问自己类的非静态成员。(看过一篇很好的文章《浅析C++中的this指针》介绍这个方面的详细内容)那要想访问怎么办呢?地球人都知道只要将: int menber; //change the line above to: static int menber; 但是这个方法让我们不得不将static function内用到的成员变量都变成static的了,而且static 的成员还要显式初始化,有没有更好的方法?答案是肯定的。如下: class a { public: static FunctionA(a* _a) { a-> menber = 1; (window.cproArray = window.cproArray || []).push({ id: "u2280119" }); } private: int menber; } 前提是这个类要分配了内存空间。其实这里我做的就是将一个对象指针作为静态成员函数的“this”指针,意在模仿传递非静态成员函数里this变量。

c++复习题

一、判断题 1. C++程序中,不得使用没有定义或说明的变量。() 2.C和C++都是面向对象的。() 3.对象实际上是功能相对独立的一段程序。() 4.包含有纯虚函数的类称为抽象类。() 5.函数定义 void swap(A &x)中的形式参数是一个变量的地址。() 6.C++提供了string类型。() 7.析构函数不能设置默认参数。() 8.静态成员函数只能直接访问该类的静态数据成员。() 9.用成员函数重载运算符所需的参数个数总比它的操作数少一个。() 10.在C++的输入输出系统中,最核心的对象是流。() 11.在面向对象程序设计中,类通过消息与外界发生关系。() 12.引用是某个变量或对象的别名,建立引用时要对它初始化。() 13.当用类的一个对象去初始化该类的另一个对象时,该类的拷贝构造函数会被自动调用。() 14.拷贝构造函数可以被显示调用。() 15.一个类的析构函数只能有一个。() 16.私有派生时,基类的public成员仍被继承为派生类的public成员。() 17.设类Counter有私有变量x,它的构造函数Counter(int a){x=a;},则对象声明“Counter c1(3);”定义了三个Counter类的对象。() 18.静态成员函数不能访问静态数据成员。() 19.类中有函数声明:“friend void f(A &x);”,则函数f只能访问该类的公有成员。()20.重载“[]”运算符函数可以带多个参数。() 二、填空题 1.面向对象程序设计方法具有抽象性、封闭性、继承性和等特点。 2.声明内联函数的关键字是。 3.C++有值传递和传递两种参数传递机制。 4.运算符用于动态内存分配,运算符用于释放动态分配的内存。5.如果类A继承了类B,则类A称为类,类B称为类。 6.在C++中,要实现动态联编,必须使用基类指针调用。 7.具有纯虚函数的类称为。 8.定义模板的关键字是。 9.虚基类的作用是解决问题。 10.假定ABC是一个类,由“ABC a[5],b(3)”创建对象时该类的构造函数被调用了次。 11.面向对象程序设计方法,程序可表示为程序=_______________。

静态函数 静态数据成员与静态成员函数 为什么虚函数必须是非静态成员函数 构造函数能为static吗

静态函数静态数据成员与静态成员函数为什么虚函数必须是非静态成员函数构造函数能为static吗? 2009-07-05 14:27 静态函数 用static声明的函数是静态函数。静态函数可以分为全局静态函数和类的静态成员函数。 Static关键字 在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。用static声明的方法是静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员。 静态方法不再是针对于某个对象调用,所以不能访问非静态成员。 可以通过对象引用或类名(不需要实例化)访问静态成员 C++类静态数据成员与类静态成员函数 函数调用的结果不会访问或者修改任何对象(非static)数据成员,这样的成员声明为静态成员函数比较好。且如果static int func(....)不是出现在类中,则它不是一个静态成员函数,只是一个普通的全局函数,只不过由于static的限制,它只能在文件所在的编译单位内使用,不能在其它编译单位内使用。 静态成员函数的声明除了在类体的函数声明前加上关键字static,以及不能声明为const或者volatile之外,与非静态成员函数相同。出现在类体之外的函数定义不能制定关键字static。 静态成员函数没有this指针。 在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? 这个问题便是本章的重点:声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数。 下面我们用几个实例来说明这个问题,类的成员需要保护,通常情况下为了不违背类的封装特性,我们是把类成员设置为protected(保护状态)的,但是我们为了简化代码,使要说明的问题更为直观,更容易理解,我们在此处都设置为public。 以下程序我们来做一个模拟访问的例子,在程序中,每建立一个对象我们设置的类静态成员变自动加一,代码如下: #include using namespace std;

§4随机变量函数的分布

§3.4 随机变量函数的分布 对离散型随机变量,我们讨论过随机变量函数的分布问题,对一般的随机变量当然也存在同样的问题。例如,若ξ是N (2 ,σμ)分布的随机变量,为了解决计算中的查表问题, 在中曾经引入变换 η=σ ξa - 这个新出现的随机变量η就是原来的随机变量ξ的一个函数。现在来讨论连续型随机变量函数的分布问题,先介绍一个便于应用的定理。 定理3.1 设ξ是一个连续型随机变量,其密度函数为p (x),又y =)(x f 严格单调,其反函数)(x h 有连续导数,则=η)(ξf 也是一个连续型随机变量,且其密度函数为 ? ? ?<<*=其他,0|],)(|)([)('β α?y y h y h p y (3.51) 其中 α=min{)(-∞f ,)(+∞f } β=min{)(-∞f ,)(+∞f } (证明 略) 例3.11(略) 例3.12(略) 2χ—分布 我们先给出下述一个式子: p (x,y)=? ? ???≤>Γ-0,00,)2(212x x x n y n 我们通常把以上述(3.53)式(其中n 是参数)为密度函数的分布称为是自由度为n 的 2χ—分布(2χ读作“卡方”),并记作)(2 n χ,它是数理统计中一个重要的分布。 (一)和的分布 设),(ηξ是一个二维连续型随机变量,密度函数为p (x,y),现在来求ηξζ+=的分布,按定义为 F ζ(y)= P (ζ

F ζ(y)= ??<+y x x dx dx x x p 2121 2 1 ),( = dx dx x x p )),((221?? ∞∞ -∞ ∞ - (3.54) 如果ξ与η是独立的,由(3.48)知P ξ(x)·P η(y)是(ηξ,)的密度函数,用P ξ(x)·P η(y)代替(3.54)式中的p (x 1,x 2)便得 F ζ(y) = dx dx x p x p ))()((221?? ∞∞ -∞ ∞-ηξ =dx dz x z p x p y ))()((11? ?∞ ∞-∞--ηξ = dz dx x z p x p y ))()((11?? ∞ -∞∞ --ηξ 由此可得 ζ 的密度函数为 F ζ(y)= F ' ξ(y)= dx x y p x p ? ∞ ∞ --)()(ηξ (3.55) 由对称性还可得 F ζ(y)= dx x p x y p ? ∞ ∞ --)()(ηξ (3.56) 由(3.55)或(3.56)式给出的运算称为卷积,通常简单地记作 P ζ=P ξ* P η 例3.13(略) 我们已经知道某些分布具有可加性,其实还有一些其它分布,也具有可加性,其中2 χ—分布的可加性在数理统计中颇为重要,我们这里顺便证明这个结论。为此,可以讨论更一般形式的一个分布—Γ分布。如果随机变量ξ具有密度函数为 p (x,y)=?? ???≤>Γ--0,00 ,)(1x x e x x βαααβ (3.57) (其中α>0, β>0为两个常数),这时称ξ是参数为(α,β)的Γ分布的随机变量,相应的分布称作参数为(α,β)的Γ分布,并记作Γ(α,β). 例3.14(略) (二)商的分布 设),(ηξ是一个二维连续型随机变量,密度函数为p (x 1,x 2),现在来求η ξ ζ= 的分

求随机变量函数的概率密度函数的教学方法

浅谈如何简单求随机变量函数的概率密度函数的方法 摘要:针对教材中给出的求连续型随机变量函数的概率密度的方法的单一,在借鉴前人研究成果的基础上,提出求概率密度的四步教学法。 概率论与数理统计是一门很有特色的数学分支,无论是综合类大学还是高职、高专院校,都将它作为一门必修课。在大学《概率论与数理统计》中,随机变量函数是一个重点也是一个难点,尤其是连续性随机变量函数的概率密度,教材中只是一般给出两种方法:一种是先求其分布函数,然后对分布函数求导,来得概率密度函数;二是教材中的定理1[1] 关键字:随机变量函数概率密度 一、 定义1:如果存在一个函数()g x ,使得随机变量,X Y 满足()Y g X =则称随机变 量Y 是随机变量X 的函数,那么随机变量Y 的概率密度函数称为随机变量函数的概率密度函数。 二、 (经典公式法)定理1:设随机变量X 具有概率密度 (),X f x x R ∈,又设 ()y g x =出处可导且恒有 ()()''0(0) g x g x ><或则 () Y g X =是一个连续性随 机变量,其概率密度函数 ()()()11' ,0,X Y f g y g y y f y αβ--???<

相关文档
相关文档 最新文档