文档库 最新最全的文档下载
当前位置:文档库 › c#类的成员初始化顺序

c#类的成员初始化顺序

c#类的成员初始化顺序
c#类的成员初始化顺序

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

// DriveB d = new DriveB();

DriveC f = new DriveC();

}

}

class BaseA

{

static DisplayClass a = new DisplayClass("基类静态成员初始化");

DisplayClass BaseA_c = new DisplayClass("基类实例变量BaseA_c 初始化");

public BaseA() { Console.WriteLine("基类构造方法被调用A"); } }

class DriveB : BaseA

{

static DisplayClass DriveB_b = new DisplayClass("继承类静态成员DriveB_b初始化");

//static BaseA DriveB_a = new BaseA();

DisplayClass DriveB_c = new DisplayClass("继承类实例变量DriveB_c初始化");

public DriveB() { Console.WriteLine("继承类构造方法被调用B"); }

}

class DriveC : DriveB

{

static DisplayClass DriveC_d = new DisplayClass("继承类静态成员DriveC_d初始化");

DisplayClass DriveC_e = new DisplayClass("继承类静态成员DriveC_e初始化");

public DriveC()

{

Console.WriteLine("继承类构造方法被调用C");

}

}

class DisplayClass

{

public DisplayClass(string diplayString)

{

Console.WriteLine(diplayString);

Console.WriteLine();

}

}

}

输出结果为:

继承类静态成员DriveC_d初始化

继承类静态成员DriveC_e初始化

继承类静态成员DriveB_b初始化

继承类实例变量DriveB_c初始化

基类静态成员初始化

基类实例变量BaseA_c初始化

基类构造方法被调用A 继承类构造方法被调用B 继承类构造方法被调用C 请按任意键继续. . . 由此可见c#中类成员的初始化与java不同,总结下有四条规律

1。类成员变量初始化先于类的构造函数

2。静态成员变量先于实例变量

3。子类成员变量先于父类成员变量

4。父类构造函数先于子类构造函数

class A

{

public static int X;

static A()

{

X = B.Y + 1;

}

}

class B

{

public static int Y = A.X + 1;

static B() {

Y = A.X + 1;

}

static void Main()

{

Console.WriteLine("X={0},Y={1}", A.X, B.Y); }

}

C++程序设计复习题及参考答案

《C++程序设计》课程复习资料 一、单项选择题: 1.下列字符串中可以用作C++标识符的是[ ] -ld 2.定义变量int a=6,则a++的值是[ ] .6 C 3.已知字母A的ASCII码为65,则表示字符常量A 错误的是[ ] A. '\101' B. '\x41' C. 65 D.“A” 4.结构化程序由三种基本结构组成,不包括[ ] A.顺序结构 B.选择结构 C.控制结构 D.循环结构 5.己知有定义: const int D 5; int i=1; double f=; char c=15; 则下列选项错误的是[ ] A.++i; B. D--; C. c++; D. --f; 6.若有定义为“int *r =new int [10];”,则释放指针所指内存空间的操作是[ ] A. delete [ ]r; B. delete *r C. delete r; D. delete r[ ]; 7.下列哪个是C++语言的不正确的标识符[ ] B. Ab1 C. bgc D. int 8.下列哪个是C++语言的合法的字符常量[ ] A. ”\0” B. '054' C. '\x89' D. '\092' 9.定义整型变量x,y,z并赋初始值6的正确语句是[ ] A. int x=y=z=6; B. int x=6,y=6,z=6; C. x=y=z=6; D. int x,y,z=6; 10.用C++语言编写的代码程序[ ] A.可立即执行 B.是一个源程序 C.经过编译即可执行 D.经过解释才能执行 11.将两个字符串连接起来组成一个字符串时,选用的函数是[ ] A. strlen () B. strcpy () C. strcat () D. strcmp () 12.在程序中,预处理命令开头的字符都是[ ] A. * B. # C. & D. @ 13.在C++语言中,表示一条语句结束的符号是[ ] A. “#” B. “;” C. “}” D. “下面的循环语句中循环体执行的次数为 [ ] for(int i=0; in/2) break; 2 2+1 C.n/2-1 15.在下面的一维数组定义中,有语法错误的语句是[ ] A. int a[ ]={1,2,3}; B. int a[10]={0}; C. int a[ ]; D. int a[5]; 16.下面的保留字中,不能作为函数的返回类型[ ] A. void B. int C. new D. long 17.下面的函数声明中,“void BC(int a, int b);”的重载函数是[ ] A. int BC(int x, int y); B. void BC(int a, char b); C. float BC(int a, int b, int c=0); D. int BC(int a, int b=0); 18.假定AB为一个类,则该类的复制构造函数的声明语句为[ ] A. AB&(AB x); B. AB(AB x); C. AB(AB* x); D. AB(AB&);

[科普]C执行顺序

C# 类的初始化顺序 继承类的static数据成员的初始化器, 继承类的static构造器 (在类名, 第一次被引用时, 调用, 如果, 没有这个构造器, 则static数据成员何时被初始化, 是不可预测的) 继承类的实例型数据成员的初始化器 在执行继承类的构造器的内容之前; 基类的static数据成员的初始化器即 static int a = 1; /// 类数据成员的定义 基类的static 构造器 ,(如果,基类的类名, 先于继承类被引用, 则先执行基类的static构造器) 基类的实例型数据成员的初始化器 基类的构造器 接着执行继承类的构造器的内容; Example : public class Base { A: private static int Number = 12; B: private int localNumner = 1; C: static Base() { /// } D: public Base() { } }

public class Child : Base { E: private static int ChildNumber = 14; F: private int local_child_number = 7; G: static Child() { /// } H: public Child() { I: /// } } Child child = new Child(); 初始化顺序为 E G F H A C B D I; static构造器的调用时刻是, 第一次引用该类的类名; public class Test { static Test() { } public staitc int Account { get { return 1; } } /// 只是举例 public static int GetAccount() { return 1;

C类构造函数初始化列表

类构造函数初始化列表 初始化列表地定义在使用编程地过程当中,常常需要对类成员进行初始化,通常地方法有两种:一种是构造函数内对类地成员赋值,一种则是使用初始化列表地构造函数显式地初始化类地成员. 构造函数初始化列表以一个冒号开始,接着是以逗号分隔地数据成员列表,每个数据成员后面跟一个放在括号中地初始化式.例如:{ : ; ; 构造函数初始化列表(): ()() {} 构造函数内部赋值() { ; ; } }; 从技术上说,用初始化列表来初始化类成员比较好,但是在大多数情况下,两者实际上没有什么区别.第二种语法被称为成员初始化列表,之所以要使用这种语法有两个原因:一个原因是必须这么做,另一个原因是出于效率考虑初始化列表地必要性初始化和赋值对内置类型地成员没有什么大地区别,像上面地任一个构造函数都可以.但在一些情况下,初始化列表可以做到构造函数做不到地事情: 、类里面有类型地成员,它是不能被赋值地,所以需要在初始化列表里面初始化它; 、引用类型地成员(也就是名字成员,它作为一个现有名字地别名),也是需要在初始化列表里面初始化地,目地是为了生成了一个其名字成员在类外可以被修改而在内部是只读地对象;

、需要调用基类地构造函数,且此基类构造函数是有参数地; 、类里面有其他类类型地成员,且这个“其他类”地构造函数是有参数地. 举个例子:设想你有一个类成员,它本身是一个类或者结构,而且只有一个带一个参数地构造函数. { : ( ) { ... } }; 因为有一个显式声明地构造函数,编译器不产生一个缺省构造函数(不带参数),所以没有一个整数就无法创建地一个实例. * ; 出错!! * (); 如果是另一个类地成员,你怎样初始化它呢?答案是你必须使用成员初始化列表. { ; : (); }; 必须使用初始化列表来初始化成员 () : () {……} 没有其它办法将参数传递给. 情况和其实一样地道理.如果成员是一个常量对象或者引用也是一样.根据地规则,常量对象和引用不能被赋值,它们只能被初始化. 初始化列表与构造函数赋值地效率比较首先把数据成员按类型分类并分情况说明: .内置数据类型,复合类型(指针,引用) 在成员初始化列表和构造函数体内进行,两者在性能和结果上都是一样地 .用户定义类型(类类型) 两者在结果上相同,但是性能上存在很大地差别. 因为编译器总是确保所有成员对象在构造函数体执行之前初始化,所以对于用户自定义类型(类),在初始化列表中只会调用类地构造函数,在构造函数体中赋值就会先调用一次类地构造函数,然后再调用一次类地赋值操作符函数. 显然后者在性能上有所损失,特别对于构造函数和赋值操作符都需要分配内存空间地情况,使用初始化列表,就可以避免不必要地多次内存分配. 举个例子:假定你有一个类具有一个类型地成员,你想把它初始化为" .".你有两种选择: 、使用构造函数赋值()

数据结构实验

实验1:顺序表基本操作 一、实验目的 1.学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表 的一些基本操作和具体的函数定义。 2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集 等运算。 3.掌握对多函数程序的输入、编辑、调试和运行过程。 二、实验要求 1.预习C语言中结构体的定义与基本操作方法。 2.对顺序表的每个基本操作用单独的函数实现。 3.编写完整程序完成下面的实验内容并上机运行。 4.整理并上交实验报告。 三、实验内容: 1.编写程序实现顺序表的下列基本操作: (1)初始化顺序表La。 (2)将La置为空表。 (3)销毁La。 (4)在La中插入一个新的元素。 (5)删除La中的某一元素。 (6)在La中查找某元素,若找到,则返回它在La中第一次出现的位置, 否则返回0。 (7)打印输出La中的元素值。 2.编写程序完成下面的操作: (1)构造两个顺序线性表La和Lb,其元素都按值非递减顺序排列。 (2)实现归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减顺序排列。 (3)假设两个顺序线性表La和Lb分别表示两个集合A和B,利用 union_Sq操作实现A=A∪B。 四、思考与提高 假设两个顺序线性表La和Lb分别表示两个集合A和B,如何实现A=A ∩B ? 实验2:单链表基本操作 一、实验目的 1.学会定义单链表的结点类型,实现对单链表的一些基本操作和具体 的函数定义,了解并掌握单链表的类定义以及成员函数的定义与调用。 2.掌握单链表基本操作及两个有序表归并、单链表逆置等操作的实现。 二、实验要求

1.预习C语言中结构体的定义与基本操作方法。 2.对单链表的每个基本操作用单独的函数实现。 3.编写完整程序完成下面的实验内容并上机运行。 4.整理并上交实验报告。 三、实验内容 1.编写程序完成单链表的下列基本操作: (1)初始化单链表La。 (2)在La中第i个元素之前插入一个新结点。 (3)删除La中的第i个元素结点。 (4)在La中查找某结点并返回其位置。 (5)打印输出La中的结点元素值。 2 .构造两个带有表头结点的有序单链表La、Lb,编写程序实现将La、 Lb合并成一个有序单链表Lc。 合并思想是:程序需要3个指针:pa、pb、pc,其中pa,pb分别指向La表与Lb表中当前待比较插入的结点,pc 指向Lc表中当前最后一个结点。依次扫描La和Lb中的元素,比较当前元素的值,将较小者链接到*pc 之后,如此重复直到La或Lb结束为止,再将另一个链表余下的内容链接到pc所指的结点之后。 3.构造一个单链表L,其头结点指针为head,编写程序实现将L逆置。 (即最后一个结点变成第一个结点,原来倒数第二个结点变成第二个结点,如此等等。) 四、思考与提高 1.如果上面实验内容2中合并的表内不允许有重复的数据该如何操作? 2.如何将一个带头结点的单链表La分解成两个同样结构的单链表Lb,Lc,使得Lb中只含La表中奇数结点,Lc中含有La表的偶数结点? 实验3:循环队列基本操作 一、实验目的 1.熟悉并能实现循环队列的定义和基本操作。 2.了解用队列解决实际应用问题。 二、实验要求 1.进行队列的基本操作时要注意队列“先进先出”的特性。 2.复习关于队列操作的基础知识。 3.编写完整程序完成下面的实验内容并上机运行。 4.整理并上交实验报告。 三、实验内容 1.任意输入队列长度和队列中的元素值,构造一个顺序循环队列,对其进行清空、插入新元素、返回队头元素以及删除队头元素操作。

java题

二、编写程序题 1、按以下要求编写程序 (1) 创建一个Rectangle类,添加width和height两个成员变量 (2) 在Rectangle中添加两种方法分别计算矩形的周长和面积 (3) 编程利用Rectangle输出一个矩形的周长和面积 public class Rectangle{ double width; double length; public Rectangle(){ this.width=width; this.length=length; } public double zhouzhang(){ return (width+length)*2; } public double mianji(){ return width*length; } public static void main(String[] args){ Rectangle R=new Rectangle(); System.out.println("周长为:"+R.zhouzhang()); System.out.println("面积为:"+R.mianji()); } } 运行结果: 周长为:0.0 面积为:0.0 2、按以下要求编写程序 (1) 编写Animal接口,接口中声明run() 方法 (2) 定义Bird类和Fish类实现Animal接口 (3) 编写Bird类和Fish类的测试程序,并调用其中的run()方法 3、设计类A和A的派生类B,要求: 1)A有两个数据成员a和b(都为int型);B中继承了A中的a和b,又定义了自己的数据成员c(int型)。 2)为A添加含有两个参数的构造方法,对a和b初始化。 3)为B添加含有一个参数的构造方法,对c初始化。 4)完成主控方法,在主控方法中用B e1=new B 5)创建对象,把a、b、c分别初始化成3、4、5,最后输出它们的和。 三、简答题

(完整版)C++复习题

复习题 一、选择填空 1.在下列关键字中,用来说明类中公有成员的是( )。 A. Public B. Private C. protected D. friend 答:A。 2.下列的各种函数中,( )不是类的成员函数。 A.构造函数 B.析构函数 C.友元函数 D.拷贝初始化构造函数答:C。 3.作用域运算符的功能是( )。 A.标识作用域的级别的 B.指出作用域的范围的 C.给定作用域的大小的 D.标识某个成员是属于哪个类的 答:D。 4.( )是不可以作为该类的成员的。 A.自身类对象的指针 B.自身类的对象 C.自身类对象的引用 D.另一个类的对象 答:B。 5.( )不是构造函数的特征。 A.构造函数的函数名与类名相同 B.构造函数可以重载 C.构造函数可以设置默认参数 D.构造函数必须指定类型说明 答:D。 6.( )是析构函数的特征。 A.一个类中只能定义一个析构函数 B.析构函数名与类名不同 C.析构函数的定义只能在类体内 D.析构函数可以有一个或多个参数 答:A。 7.通常的拷贝初始化构造函数的参数是( )。 A.某个对象名 B.某个对象的成员名 C.某个对象的引用名 D.某个对象的指针名 答:C。 8.关于成员函数特征的下述描述中,( )是错误的。 A.成员函数一定是内联函数 B.成员函数可以重载 C.成员函数可以设置参数的默认值 D.成员函数可以是静态的

答:A。 9.下述静态数据成员的特性中,( )是错误的。 A.说明静态数据成员时前边要加修饰符static B.静态数据成员要在类体外进行初始化 c.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算 符 D.静态数据成员不是所有对象所共用的 答:D。 l0.友元的作用( )。 A.提高程序的运用效率 B.加强类的封装性 C.实现数据的隐藏性 D.增加成员函数的种类 答:A。 11.下列关于对象数组的描述中,( )是错误的。 A.对象数组的下标是从0开始的 B.对象数组的数组名是一个常量指针 C.对象数组的每个元素是同一个类的对象 D.对象数组只能赋初值,而不能被赋值 答案:D。 12.下列定义中,( )是定义指向数组的指针P。 A. int*p[5]; B. int(*p)[5]; C. (int *)p[5] D. int*p[]; 答案:B。 13.下列说明中 Const char * Ptr; ptr应该是( )。 A.指向字符常量的指针 B.指向字符的常量指针 C.指向字符串常量的指针 D.指向字符串的常量指针 答案:C。 14.已知:print( )函数是一个类的常成员函数,它无返回值,下列表示中是正确的。 A. void print()const ; B. const void Print( ); C. void const print( ); D. void print (const); 答案:A。 15.关于new运算符的下列描述中,( )是错的。 A.它可以用来动态创建对象和对象数组 B.使用它创建的对象或对象数组,可以使用运算符delete删除

C++类构造函数初始化列表

C++类构造函数初始化列表 初始化列表的定义 在使用C++编程的过程当中,常常需要对类成员进行初始化,通常的方法有两种:一种是构造函数内对类的成员赋值,一种则是使用初始化列表的构造函数显式的初始化类的成员。 构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如: class CExample { public: int a; float b; //构造函数初始化列表 CExample(): a(0),b(8.8) {} //构造函数内部赋值 CExample() { a=0; b=8.8; } }; 从技术上说,用初始化列表来初始化类成员比较好,但是在大多数情况下,两者实际上没有什么区别。第二种语法被称为成员初始化列表,之所以要使用这种语法有两个原因:一个原因是必须这么做,另一个原因是出于效率考虑

初始化列表的必要性 初始化和赋值对内置类型的成员没有什么大的区别,像上面的任一个构造函数都可以。但在一些情况下,初始化列表可以做到构造函数做不到的事情: 1、类里面有const类型的成员,它是不能被赋值的,所以需要在初始化列表里面初始化它; 2、引用类型的成员(也就是名字成员,它作为一个现有名字的别名),也是需要在初始化列表里面初始化的,目的是为了生成了一个其名字成员在类外可以被修改而在内部是只读的对象; 3、需要调用基类的构造函数,且此基类构造函数是有参数的; 4、类里面有其他类类型的成员,且这个“其他类”的构造函数是有参数的。 举个例子:设想你有一个类成员,它本身是一个类或者结构,而且只有一个带一个参数的构造函数。 classCExampleOld { public: CExampleOld(int x) { ... } }; 因为CExampleOld有一个显式声明的构造函数,编译器不产生一个缺省构造函数(不带参数),所以没有一个整数就无法创建CExampleOld的一个实例。 CExampleOld* pEO = new CExampleOld; // 出错!! CExampleOld* pEO = new CExampleOld(2); // OK 如果CExampleOld是另一个类的成员,你怎样初始化它呢?答案是你必须使用成员初始化列表。class CExampleNew { CExampleOldm_EO; public: CExampleNew(); }; // 必须使用初始化列表来初始化成员m_EO //CExampleNew::CExampleNew() : m_EO(2) {……} 没有其它办法将参数传递给m_EO。 情况3和4其实一样的道理。如果成员是一个常量对象或者引用也是一样。根据C++的规则,常量对象和引用不能被赋值,它们只能被初始化。

软件开发一系列按照特定顺序组织的计算机数据和指令的集

软件开发:一系列按照特定顺序组织的计算机数据和指令的集合。 系统:DOS、windows Linux 应用软件:扫雷、QQ 实现了人与计算机间更好的交互 交互方式:图形化界面、命令行方式 Dos常见的命令行: SUN(Stanford University Network)斯坦福大学网络公司 JEE企业版(Servlet JSP等)是开发企业环境下的应用程序提供的一套解决方案,主要针对WEb应用程序开发 JSE标准版是为开发普通桌面和商务应用程序 JME小型版开发电子产品和嵌入式设备 跨平台性:通过JA V A语言编写的应用程序在不同的系统平台上都可以应用 原理:在要运行的java应用程序的操作系统上,先安装一个java虚拟机(jvm java virtual machine)有JVM来负责JA V A程序在该系统中的运行。 JA V A语言的环境搭建: JRE:RUNTIME ENVIRONMENT java运行环境和java程序所需的核心类库等 JDK:java开发工具包(DEVELOPMENT KIT)提供java开发人员使用的,包含了java的开发工具包,也包含了JRE (javac 编译工具)(jar 打包工具) 电脑、属性、高级、环境变量、Path:将要执行的Javac路径放置在或者说告诉windows。Path=D:\Java\jdk1.6.0_21\bin; haha不好听没有意义:改为JA V A_HOME Haha=D:\Java\jdk1.6.0_21; Path=%Haha%\bin; 临时配置方式:set可以查看或者配置环境变量 Dos只在当前窗口有效。Set path =D:\Java\jdk1.6.0_21\bin;就可以了 在path的基础上再加上新的目录,Set path =D:\Java\jdk1.6.0_21\bin;%Path% start开一个新窗口,沿袭前者的配置。 Hello world :public class Demo,此时类名必须和源文件名称相同,比如123.java、Demo.class,若此时的Demo为Public时源文件必须为Demo.java Set classpath= ;此时什么都没有写的话,就是对环境变量的清空。告诉java去哪找需要加载的类文件。 问题:环境变量path和classpath的作用是什么? 答:.PA TH变量用于列出可执行文件的搜索路径.因为要通过命令行的命令启JA V A,JA V AC等编译工具和解释工具,系统必须要知道他们所在位置,而PA TH则指明了其位置. CLASSPATH变量用于JA V A加载类的路径.只有在classpath设置的路径中的类才能被加载. 注释:******************虚拟机在启动的时候先找的是环境变量classpath **************

变更管理流程说明

变更管理流程说明 变更目标1 变更管理确保标准方法和过程可以得到使用,对服务质量产生最小的影响, 服务,并得到快速实施,确保所有变更都进行了有效跟踪。从而能够有效的提供IT 服务质量的不利影响。IT减少变更对 组织人员2 变更管理员2.1 负责对变更请求进行过滤和分类,对变更进行管理,并负责变更实施过程中 的筹划和协调工作。 在嘉定项目中,变更管理员(经理)是由客户相关人员来担当的。 变更顾问委员会2.2 变更委员会定期开会,评估变更,对变更进行排序,拟定相应的计划。正常 情况下只有重要的变更才会交由变更委员会进行处理。变更委员会的组成如下:变更管理员(经理)? 服务级别管理员(经理)? 服务台经理?

应用开发代表? 供应商代表? 委员会成员不限于以上人员。 紧急变更委员会2.3 紧急变更委员会隶属于变更委员会,其成员由变更委员会中的部分成员组成,负责紧急变更的会商处理工作,以便作出快速决定。 1. 变更管理流程说明 变更流程3 变更管理总流程3.1

变更请求记录 拒绝批准或拒绝终止变更请求接受分类优先级)/(类别配置管理流程提供配置项信息并监控配置项的状态紧急程序是是否紧急 否规划(影响和资源) 协调 构建 测试 实施

回滚计划否是否正常运行是 评估并终止 变更管理总流程图图 3.1-1 2 变更管理流程说明 正常变更流程3.2 变更管理员变更管理员变更管理员 变更请求请求过滤变更分类确定变更级别 次要重大重要变更管理员变更管理员变更管理员 提交变更请求至变更提交接受变更和实施提交变更请求至高级的报告给变更委员会委员会成员委员会成员成员变更执行小组变更委员会高级管理层 构建、测试计划和回从业务或财务角度接从技术、业务或财务滚计划角度接受或拒绝变更受或拒绝变更变更管理员测试人员变更管理员关闭测试变更变更回顾测试变更

Java程序设计试题及答案(1)

Java程序设计试题及答案(一) 一、判断题。判断下列各题是否正确,若正确,在()内打“√”,否则打“×”。 1、Java语言具有较好的安全性和可移植性及与平台无关等特性。√ 2、Java语言的源程序不是编译型的,而是编译解释型的。√ 3、Java语言使用的是Unicode字符集,每个字符在内存中占8位。× 4、Java语言中不同数据类型的长度是固定的,不随机器硬件不同而改变。√ 6、一个类可以实现多个接口,接口可以实现“多重继承”。√ 7、实现接口的类不能是抽象类。× 二、不定项选择题。 1、编译Java Application源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为(B)。 A、java B、class C、html D、exe 2、main方法是Java Application程序执行的入口点,关于main方法的方法首部,以下(B)项是合法的。 A、public static void main() B、public static void main(String args[]) C、public static int main(String[] arg) D、public void main(String arg[]) 3、关于下面代码的说法(C)是正确的? public class Example{ public static void main(String[] args){ int[] arr= new int[10]; System.out.println(arr[1]); } } A、编译时产生错误 B、编译时正确,运行时将产生错误 C、输出零 D、输出空(null) 4、不正确的表达式是(AB)。 A、float a=1.0d; B、Double a=new Double(1.0) C、byte a = (byte)340; D、Byte a = 120;

面向对象程序设计题库(C++).docx

、单项选择题 1. 在 C++ 语言中,对函数参数默认值描述正确的是:( D ) A) 函数参数的默认值只能设定一个 B) 一个函数的参数若有多个,则参数默认值的设定可以不连续 C) 函数参数必须设定默认值 D) 在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值 2. 假定 AB 为一个类,则执行 AB x ;语句时将自动调用该类的( B ) A) 有参构造函数 B) 无参构造函数 C) 拷贝构造函数 D) 赋值构造函数 3. 下述关于开关语句的描述中,( )是正确的。 A) 开关语句中 default 子句可以没有,也可以有一个 ; B) 开关语句中每个语句序列中必须有 break 语句 ; C) 开关语句中 default 子句只能放在最后; D) 开关语句中 case 子句后面的表达式可以是整形表达式。 4. 关于对象概念的描述中,( ) 是错误的。 A) 对象就是 C 语言中的结构变量 ; B) 对象代表着正在创建的系统中的一个实体; C) 对象是一个状态和操作(或方法)的封装体 D) 对象之间的信息传递是通过消息进行的 5. 下列给字符数组进行初始化中,( )是正确的。 7. 声明类 test 的拷贝构造函数的正确形式是 ( D ) 8. 关于 new 运算符的下列描述中,( ) 是错的。 A) 它可以用来动态创建对象和对象数组; B) 使用它创建的对象或对象数组可以使用运算符 delete 删除 ; C) 使用它创建对象时要调用构造函数; D) 使用它创建对象数组时必须指定初始值。 9. 在 C++ 中有以下 4 条语句: static int hot=200;int &rad=hot; A) 0 B) 100 C) 300 D) 200 10. 下列关于构造函数的描述中,错误的是 ( B ) A) 构造函数可以设置默认参数; B) 构造函数在声明对象时自动执行; C) 构造函数可以对静态数据成员进行初始化; D) 构造函数可以重载; A) char s1[ ]="12345abcd"; C) char s3[][3]={ 'a', 'x', 'y'}; 6. 在 int a[][3]={{1},{3,2},{4,5,6},{0}} B) char s2[3]="xyz"; D) char s4[2[3]={"xyz","mnp"}; 中, a[2][2] 的值是 ( ) 。 A) 3 B) 2 C) 6 D) 4 A) int test B) void test C) test(void) D) test(test&) hot=hot+100;cout<

C++中成员变量初始化有两种方式的区别

C++中成员变量初始化有两种方式的区别 构造函数初始化列表和构造函数体内赋值两种方式有何不同? 成员变量初始化的顺序是按照在类中定义的顺序。 1 内部数据类型(char,int……指针等) class Animal{ public: Animal(int weight,int height): //A初始化列表 m_weight(weight), m_height(height) { } Animal(int weight,int height) //B函数体内初始化 { m_weight = weight; m_height = height; } private: int m_weight; int m_height; }; 对于这些内部类型来说,基本上是没有区别的,效率上也不存在多大差异。当然A和B方式不能共存的。 2 无默认构造函数的继承关系中 class Animal{ public: Animal(int weight,int height): //没有提供无参的构造函数 m_weight(weight), m_height(height) { } private: int m_weight; int m_height; }; class Dog: public Animal{ public: Dog(int weight,int height,int type) //error 构造函数父类Animal无合适构造函数 { } private: int m_type; }; 这种必须在派生类中构造函数中初始化提供父类的初始化,因为对象构造的顺序是:

父类——子类——…… 所以必须: class Dog: public Animal{ public: Dog(int weight,int height,int type): Animal(weight,height) //必须使用初始化列表增加对父类的初始化{ ; } private: int m_type; }; 3 类中const常量,必须在初始化列表中初始,不能使用赋值的方式初始化 class Dog: public Animal{ public: Dog(int weight,int height,int type): Animal(weight,height), LEGS(4) //必须在初始化列表中初始化 { //LEGS = 4; //error } private: int m_type; const int LEGS; }; 4 包含有自定义数据类型(类)对象的成员初始化 class Food{ public: Food(int type = 10){ m_type = 10; } Food(Food &other) //拷贝构造函数 { m_type = other.m_type; } Food & operator =(Food &other) //重载赋值=函数 { m_type = other.m_type; return *this; } private: int m_type; }; (1)构造函数赋值方式初始化成员对象m_food

模拟题1答案

C++程序设计模拟试卷(一) 一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中 只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无 分。 1. 编写C++程序一般需经过的几个步骤依次是() A. 编辑、调试、编译、连接 B. 编辑、编译、连接、运行 C. 编译、调试、编辑、连接 D. 编译、编辑、连接、运行 答案:B 解析:(P21)经过编辑、编译、连接和运行四个步骤。编辑是将C++源程序输入计算机的过程,保 存文件名为cpp。编译是使用系统提供的编译器将源程序cpp生成机器语言的过程,目标文件为 obj,由于没有得到系统分配的绝对地址,还不能直接运行。连接是将目标文件obj转换为可执行 程序的过程,结果为exe。运行是执行exe,在屏幕上显示结果的过程。 2. 决定C++语言中函数的返回值类型的是() A. return语句中的表达式类型 B. 调用该函数时系统随机产生的类型 C. 调用该函数时的主调用函数类型 D. 在定义该函数时所指定的数据类型 答案:D 解析:(P51)函数的返回值类型由定义函数时的指定的数据类型决定的。A项的表达式的值要转换 成函数的定义时的返回类型。 3. 下面叙述不正确的是() A. 派生类一般都用公有派生 B. 对基类成员的访问必须是无二义性的 C. 赋值兼容规则也适用于多重继承的组合 D. 基类的公有成员在派生类中仍然是公有的 答案:D 解析:(P136)继承方式有三种:公有、私有和保护。多继承中,多个基类具有同名成员,在它们 的子类中访问这些成员,就产生了二义性,但进行访问时,不能存在二义性。赋值兼容规则是指 派生类对象可以当作基类对象使用,只要存在继承关系,所以单继承或多继承都适用。基类中的 公有成员采用私有继承时,在派生类中变成了私有成员,所以D项错误。 4. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个

北语 18春《C++》

18春《C++》作业_1 一、单选题( 每题5分, 共15道小题, 总分值75分) 1.下面程序的输出结果是()。 #include int fun(char *s) { char *p=s; while(*p!='\0') p++; return (p-s); } void main() { cout<<fun("abcdefghijklmnopqrst ")<<endl; } A. 20 B. 6 C. 19 D. 0 答案:A 2.有关类的说法不正确的是()。 A. 类是一种用户自定义的数据类型 B. 只有类中的成员函数才能存取类中的私有成员 C. 在类中,如果不做特别说明,所指的数据均为私有类型 D. 在类中,如果不做特别说明,所指的成员函数均为公有类型答案:D 3.每个C++程序都必须有且仅有一个()。 A. 预处理命令 B. 主函数 C. 函数 D. 语句 答案:B 4.下面叙述不正确的是()。 A. 派生类一般都用公有派生 B. 对基类成员的访问必须是无二义性的 C. 赋值兼容规则也适用于多重继承的组合 D. 基类的公有成员在派生类中仍然是公有的 答案:D 5.下列不是描述类的成员函数的是()。 A. 构造函数

B. 析构函数 C. 友元函数 D. 拷贝构造函数 答案:C 6.下列运算符中,在C++语言中不能重载的是()。 A. * B. >= C. :: D. / 7.下列有关重载函数的说法中正确的是()。 A. 重载函数必须具有不同的返回值类型 B. 重载函数参数个数必须相同 C. 重载函数必须有不同的形参列表 D. 重载函数名可以不同 8.在派生类中定义虚函数时,可以与基类中相应的虚函数不同的是()。 A. 参数类型 B. 参数个数 C. 函数名称 D. 函数体 9.下列关于C++与C语言关系的描述中错误的是()。 A. C++是C语言的超集 B. C++是C语言进行了扩充 C. C++和C语言都是面向对象的程序设计语言 D. C++包含C语言的全部语法特征 10.类模板的使用实际上是类模板实例化成一个具体的()。 A. 类 B. 对象 C. 函数 D. 模板类 11.下面关于友元的描述中,错误的是()。 A. 友元函数可以访问该类的私有数据成员。 B. 一个类的友元类中的成员函数都是这个类的友元函数。 C. 友元可以提高程序的运行效率。 D. 类与类之间的友元关系可以继承。 12.编写C++程序一般需经过的几个步骤依次是()。 A. 编辑、调试、编译、连接 B. 编辑、编译、连接、运行

操作系统实验三

实验三进程的创建 一、实验目的 ·练习使用EOS API 函数CreateProcess 创建一个进程,掌握创建进程的方法,理解进程和程序的区别。 ·调试跟踪CreateProcess 函数的执行过程,了解进程的创建过程,理解进程是资源分配的基本单位。 ·调试跟踪CreateThread 函数的执行过程,了解线程的创建过程,理解线程是调度的基本单位。 二、实验内容 1、执行了实验指导书3.2的步骤,学习到了如何使用控制台命令创建一个EOS 应用程序的进程,结果如下图所示。 2、执行了实验指导书3.3的步骤,学习到了如何使用控制台命令创建一个EOS 应用程序的进程,结果如下图所示。

3、执行了实验指导书3.4的步骤,观察到了系统中有三个进程,其中第一个是系统进程,镜像名称为空;另外两个是刚刚创建的应用程序的进程,镜像名称分别为“A:\EOSApp.exe”和“A:\Hello.exe”。其中,A:\EOSApp.exe进程是父进程,其主线程处于运行状态;A:\Hello.exe 进程是子进程,其主线程处于就绪状态,当父进程的主线程通过调用WaitForSingleObject 函数进入阻塞状态让出处理器后,这个处于就绪状态的线程就会占用处理器开始运行。这两个应用程序的进程和线程的优先级都为8。说明了处于阻塞队列的进程等到I/O完成后按照优先级策略排成就绪队列,等到获得CPU后便可立即执行。 4、执行了实验指导书3.5的步骤,观察到了用于存储内核管理的数据,已经使用的虚拟地址空间都大于0x80000000,说明了内核在4G 虚拟地址空间;观察到了CreateProcess 函数中所有指令的虚拟地址都是大于0x80000000 的,验证了内核程序(kernel.dll)位于高2G 虚拟地址空间;观察到了“反汇编”窗口中main 函数所有指令的虚拟地址都是小于0x80000000 的,说明应用程序(eosapp.exe)位于低2G 的虚拟地址空间中;观察到了调试PspCreateProcessEnvironment 函数时*NewProcess 的值的变化情况,了解了各个成员变量的初始化情况;用NewTwoProc.c 文件中的源代码替换EOS 应用程序项目中EOSApp.c 文件内的源代码,生成后启动调试,查看多个进程并发执行的结果如图所示,了解了通过编程的方式创建一个应用程序的多个进程。

面向对象程序设计-试卷2

一、选择题(每题2.5分,共30分) 1、下列的各类函数中,( )不是类的成员函数。 A、构造函数 B、析构函数 C、友员函数 D、拷贝初始化构造函数 2、应在下列程序划线处填入的正确语句是( )。 class Base { public: void fun(){cout<<"Base::fun"<fun(); 3、( )是不可以作为该类的成员的。 A、自身类对象的指针 B、自身类的对象 C、自身类对象的引用 D、另一个类的对象 4、下列描述中,( )是抽象类的特性。 A、可以说明虚函数 B、可以进行构造函数重载 C、可以定义友元函 D、不能定义其对象 5、友员的作用( )。 A、提高程序的运用效率 B、加强类的封装性 C、实现数据的隐藏性 D、增强成员函数的种类 6、在表达式x+y*z中,+ 是作为成员函数重载的运算符,* 是作为非成员函数重载的运算符。则operator+ 有( )个参数,operator* 有( )参数。 A、2 2 B、2 1 C、1 2 D、1 1 7、print()函数是一个类的常成员函数,它无返回值,下列表示中,( )是正确的。 A、void print() const B、const void print( ) C、void const print( ) D、void print (const) 8、下列对派生类的描述中,( )是错的。 A、一个派生类可以作另一个派生类的基类 B、派生类至少有一个基类

复习作业题的参考答案

项目一类和对象 选择题 1.可以在本类及派生类的成员函数中进行访问的访问控制修饰符是() A.private B.protected C.public 答案:B 2.在IDE中将编程项目采用多文件结构下,类的定义一般放在() A.头文件 B.程序文件 C.主程序文件 答案:A 3.内联成员函数在类外定义时要将其和类定义一起放在() A.头文件 B.程序文件 C.主程序文件 答案:A 4.下面哪个内存区域是C++中的运行时动态内存分配区域? A.代码区 B.栈区 C.数据区 D.堆区 答案:D 5.对象作为函数参数使用时,一般使用()形式 A.引用 B.指针 C.对象拷贝 答案:A 6.同类的多个不同对象的数据成员值各有不同,但不同对象可以共享类的成员函数代码,

实际调用成员函数时,是通过()来区分不同对象的。 A.显式给出不同对象不同地址 B.隐含的this指针 C.引用 答案:B 7.下面哪一种情况不会自动调用拷贝构造函数。() A.用一个对象初始化另一个对象时 B.当一个对象作为值传递给一个函数时 C.当一个对象作为值从一个函数返回之前,该对象被拷贝到栈区 D.函数调用结束后,栈区中的返回对象拷贝给主调程序的对象 E.建立指向对象的指针并初始化指针值时 答案:E 8.下列哪些对象的数据成员类型可以不用初始化表的方式进行初始化() A.常量数据成员 B.引用数据成员 C.类中对象成员 D.一般数据成员 答案:D 9.下列哪一种类设计一般无需在类中设计静态数据成员以使建立的多个对象共享静态数 据数据成员。 A.一个链表类的头指针和尾指针 B.一个学生类中用于保存建立了多少个学生对象的计数器 C.银行帐号类中的年利率 D.一般只用于建立一个对象的类 答案:D 10.一个类中的公有(public)性质的静态数据成员,以下哪一种访问方式是错误的() A.对象名.静态数据成员名 B.指向对象的指针—>静态数据成员名 C.类名::静态数据成员名 D.类名.静态数据成员名 答案:D 11.下列哪一个运算符不能够被类所重载() A.“.”成员访问运算符 B.“*”成员指针访问运算符

相关文档