Microsoft Word - 第3章.doc

Size: px
Start display at page:

Download "Microsoft Word - 第3章.doc"

Transcription

1 第 3 章 类和对象 Ⅱ 常见考点 常对象的使用方法 常数据成员和常成员函数的使用方法 mutable 数据成员的特点 构造函数中初始化列表的使用方法 explicit 关键字的作用 子对象的使用方法 使用类前向引用声明的情况 子对象构造函数的设计和执行次序 静态子对象的特点 嵌套类和局部类的设计方法与作用 3.1 常对象和常对象成员 要点归纳 1. 常对象常对象是指对象常量, 其一般定义格式如下 : 类名 const 对象名 ; 或者 const 类名对象名 ; 在使用常对象时需要注意以下几点 : 在定义常对象时必须进行初始化 常对象的数据成员不能被更新 如果一个对象被定义为常对象, 则不能调用该对象的非 const 成员函数, 否则会报错 这样做是为了防止非 const 成员函数修改常对象中的数据成员值, 因为 const 成员函数是不可以修改对象中的数据成员值的 94

2 第 3 章类和对象 Ⅱ 2. 常对象成员 常对象成员包括常数据成员和常成员函数 1 常数据成员 类的成员数据可以是常量和常引用, 使用 const 定义的数据成员为常数据成员 如果在一个类中定义了 n 个常数据成员, 那么如何给它们赋初值呢? 只能通过构造函数, 并且构造函数只能通过成员初始化列表来实现, 其一般格式如下 : 构造函数 ( 参数表 ): 常数据成员 1( 参数 1), 常数据成员 2( 参数 2),, 常数据成员 n( 参数 n) 其中, 冒号后面是一个成员初始化列表, 它包含一个初始化项, 当有多个初始化项时要用逗号分隔开 在执行构造函数时自动将 常数据成员 1 赋值为 参数 1 的值 常数据成员 2 赋值为 参数 2 的值 常数据成员 n 赋值为 参数 n 的值 2 对成员初始化列表的深入讨论 实际上, 对于类的非常数据成员也可以通过构造函数的成员初始化列表来初始化, 只不过非常数据成员还可以在构造函数体内赋值, 成员初始化列表是直接调用拷贝构造函数来完成的 带成员初始化列表的构造函数的执行顺序是这样的 : 先执行初始化列表, 再执行函数体, 对于含有多个初始化项的列表不是按照从左到右或者从右到左的顺序执行, 而是按照数据成员在类中定义的顺序执行的 例如有以下程序 : class Test int a,b; const int x; // 常数据成员 Test(int i,int j,int k):x(i),a(b),b(j) b=k; void display() ; // 构造函数 cout << "a=" << a << ",b=" << b << ",x=" << x << endl; Test s(1,2,3); s.display(); 在定义 s 对象时调用构造函数, 由于类 Test 中定义数据成员的顺序是 a b x( 常数 95

3 直击招聘 程序员面试笔试 C ++ 语言深度解析 据成员 ), 先执行 a(b), 由于此时 b 没有初始化, 为垃圾值, 所以 a 被初始化为一个垃圾值, 然后执行 b(j), 即 b=2, 再执行 x(i), 即 x=1, 最后执行函数体, 置 b=3 输出结果如下: a= ( 垃圾值 ),b=3,x=1 无论是在构造函数成员初始化列表中初始化数据成员, 还是在构造函数体中对它们赋值, 最终结果是相同的 那么两者的性能有什么区别呢? 一般情况下, 对于内置的数据类型 ( 含指针和引用 ), 在成员初始化列表和构造函数体内进行, 在性能和结果上都是一样的 ; 对于用户自定义的类类型 ( 即子对象的情况 ), 在性能上存在很大的差别, 因为子对象在进入构造函数体后已经构造完成, 也就是说在成员初始化列表处进行构造对象的工作, 这时调用子对象的构造函数, 在进入函数体之后进行的是对已经构造好的子对象的赋值, 需要调用其赋值运算符才能完成 ( 如果未提供, 编译器会提供一个默认的赋值运算符函数按成员进行赋值 ), 而函数调用是浪费资源的, 所以在这种情况下采用成员初始化列表来初始化数据成员性能更优 3 常成员函数使用 const 关键字声明的函数为常成员函数, 常成员函数的声明格式如下 : 函数类型函数名 ( 参数表 ) const; 在使用常成员函数时需要注意以下几点 : const 是函数类型的一个组成部分, 因此在实现部分也要带 const 关键字 常成员函数不能更新对象的数据成员, 也不能调用该类中的非常成员函数 如果将一个对象定义为常对象, 则通过该常对象只能调用它的常成员函数, 不能调用其他非常成员函数 const 关键字可以参与区分重载函数 例如, 如果在类中有声明 : void display(); void display() const; 则这是对 display 的有效重载 例如有以下程序 : class Test const int n,m; // 常数据成员 Test(int i,int j):n(i),m(j) // 构造函数 void display() // 重载成员函数 cout << "n=" << n << ",m=" << m << endl; void display() const // 常成员函数 cout << "const n=" << n << ",m=" << m << endl; ; Test a(1,2); 96

4 第 3 章类和对象 Ⅱ a.display(); const Test b(3,4); b.display(); // 常对象 在上述程序中类 Test 的 n m 均为常数据成员, 构造函数采用初始化列表给常数据成员赋值 display 成员函数有两个版本 在 main 中定义了对象 a 和常对象 b, 前者调用 display 的非 const 版本, 后者调用 display 的 const 版本 程序的执行结果如下 : n=1,m=2 const n=3,m=4 3.mutable 在定义一个常对象后只能通过它调用 const 成员函数, 而且 const 成员函数不能修改数据成员值 如果希望通过常对象修改某些数据成员值, 只需要将其定义为 mutable( 易变的 ), mutable 数据成员永远不会是 const 成员, 即使它是一个 const 对象的数据成员 例如有以下程序 : mutable int i; //mutable 数据成员 int j; // 非 mutable 数据成员 A(int x,int y) i=x; j=y; void add() const i++; ; void disp() const cout << "i=" << i << ",j=" << j << endl; ; const A a(1,2); cout << " 修改前 :"; a.disp(); a.add(); cout << " 修改后 :"; a.disp(); 类 A 中的 i 是 mutable 数据成员, 所以可以在 const 成员函数中修改它的值, 而且常对象 a 通过调用该 const 成员函数改变数据成员 i 的值 由于 j 不是 mutable 数据成员, 不能进行像数据成员 i 那样的操作 程序的执行结果如下 : 修改前 :i=1,j=2 修改后 :i=2,j=2 97

5 直击招聘 程序员面试笔试 C ++ 语言深度解析 面试真题解析 面试题 3-1 下面的说法正确的是( ) A.C++ 中已有的任何运算符都可以重载 B.const 对象只能调用 const 类型成员函数 C. 构造函数和析构函数都可以是虚函数 D. 函数重载的返回值的类型必须相同 答 : 常对象只能调用它的常成员函数 答案为 B 面试题 3-2 X 是类名称, 下面 ( ) 写法是错误的 A.const X *x B.X const *x C.const X const *x D.X * const x 答 : 在 X * const x 中 const 修饰对象名 x, 表示对象指针 x 是不能修改的, 所以必须初 始化 答案为 D 面试题 3-3 假设 A 是一个类,A* abc() const 是该类的一个成员函数的原型 若该函 数返回 this 值, 当用 x.abc() 调用该成员函数后 x 的值 ( ) A. 可能被改变 B. 已经被改变 C. 受到函数调用的影响 D. 不变 答 :abc() 是类 A 的一个常成员函数, 只能用常对象调用, 在这里调用为 x.abc(), 说明 x 是类 A 的常对象, 显然调用后 x 的值是不变的 答案为 D 实际上这道面试题是不严谨的, 由于只能用常对象调用常成员函数, 所以在这种函数 中 this 指针是常指针, 而 abc() 函数的类型为 A* 是错误的, 应该改为 A const * abc() 面试题 3-4 有如下代码,result 变量的输出结果是 ( ) #include <iostream> using namespace std; int i=1; class MyCls MyCls():m_nFor(m_nThd),m_nSec(i++),m_nFir(i++),m_nThd(i++) m_nthd=i; void echo() private: cout << "result:" << m_nfir+m_nsec+m_nthd+m_nfor << endl; int m_nfir; int m_nsec; int m_nthd; int &m_nfor; 98

6 第 3 章类和对象 Ⅱ ; int main() MyCls ocls; ocls.echo(); return 0; A.10 B.11 C.9 D.12 E.8 答 : 在创建对象 ocls 时调用构造函数, 全局变量 i 的初值为 1, 先按 MyCls 类数据成员的顺序执行初始化列表, 即 i=1,m_nfir(i++) m_nfir=1,i=2;m_nsec(i++) m_nsec=2, i=3;m_nthd(i++) m_nthd =3,i=4;m_nFor(m_nThd) m_nfor 为 m_nthd 的引用, 也就是 m_nfor=3 最后执行函数体,m_nThd=i=4, 而 m_nfor 为 m_nthd 的引用, 所以 m_nfor=4 执行 ocls.echo(),result=m_nfir+m_nsec+m_nthd+m_nfor= =11 答案为 B 面试题 3-5 有一个类 A, 其数据成员如下 : private: int a; const int b; float *&c; static const char *d; static double *e; ; 则构造函数中成员变量一定要通过初始化列表来初始化的是 ( ) A.a b c B.b c C.b c d e D.b c d E.b F.c 答 : 常数据成员 b 必须通过初始化列表来初始化 c 是引用型指针变量, 引用必须在定义的时候初始化, 并且不能重新赋值, 所以也要写在初始化列表中 d 和 e 都是静态指针变量, 属于类变量, 不能在构造函数中赋值 答案为 B 面试题 3-6 以下程序的输出结果是什么? #include <iostream> using namespace std; class base 99

7 直击招聘 程序员面试笔试 C ++ 语言深度解析 private: ; int m_i; int m_j; base(): m_j(0), m_i(m_j) base(int i): m_j(i), m_i(m_j) int get_i() return m_i; int get_j() return m_j; int main() base obj(98); cout << obj.get_i() << "," << obj.get_j() <<endl; return 0; 答 : 在 main 函数中定义 obj 对象时调用重载构造函数 由于在 base 类中定义数据成员的顺序是 m_i m_j, 先执行 m_i(m_j), 而 m_j 没有赋值, 将垃圾值赋给 m_i, 再执行 m_j(i), 置 m_j=98, 最后执行重载构造函数的函数体, 其为空, 所以输出结果是 ( 垃圾值 ),98 面试题 3-7 下面这个类的声明正确吗? 为什么? const int Size=0; ; 答 : 在类 A 中存在数据成员的问题, 因为常数据成员必须在构造函数的初始化列表中初始化或者将其设置成 static, 同时类数据成员不能在定义时初始化 正确的程序如下 : 或者 ; ; const int Size; A():Size(0) ; static int Size; int A::Size=0; 100

8 第 3 章类和对象 Ⅱ 3.2 C++ 中的 explicit 要点归纳 先看以下程序 : int n; A(int m) n=m; void display() cout << "n=" << n << endl; ; A a=1; a.display(); main 函数中的 A a=1 是什么意思呢? 实际上 C++ 的构造函数默认是隐式的, 该语句相当于 A a(1), 所以程序正确执行并输出 n=1 如果不希望这种隐式调用, 可以在构造函数前面加上 explicit, 即将前面类 A 的重载构造函数改为如下 : explicit A(int m) n=m; 这样 A a=1 就不会调用构造函数, 将整数 1 赋值给对象 a, 此时程序出现 cannot convert from 'const int' to '' 的编译错误 其只能显式调用构造函数, 即采用形如 A a(1) 的方式定义对象 实际上 C++ 中的 explicit 关键字 ( 其含义是明确的, 不隐瞒的 ) 只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显式的, 而非隐式的, 从而阻止不允许的经过构造函数进行的隐式转换 类构造函数在默认情况下都是隐式的 在 C++ 中一个参数的构造函数 ( 或者除了第 1 个参数外其余参数都有默认值的多参构造函数 ) 承担了两个角色, 一个是构造器, 二是默认且隐含的类型转换操作符 所以在写形如 A a=n 这样的代码且恰好类 A 有单个参数的构造函数时编译器自动调用这个构造函数创建一个类 A 的对象 a, 而且 explicit 不是重载区分符, 如果类 A 中同时出现以下两行代码是不允许的 : 101

9 直击招聘 程序员面试笔试 C ++ 语言深度解析 explicit A(int m) n=m; A(int m) n=m; 面试真题解析 面试题 3-8 以下程序的输出结果是 ( ) #include <string> // 包含 string 类 #include <iostream> using namespace std; class Number string type; Number():type("void") explicit Number(short):type("short") Number(int):type("int") ; void Show(const Number &n) cout << n.type; void f() short s=42; Show(s); f(); A.void B.short C.int D.None of the above 答 : 在调用普通函数 f 时执行 s=42, 调用普通 Show(s), 参数传递为 const Number &n=s, 那么调用哪个构造函数创建 n 对象呢? 由于 Number(short) 是 explicit 构造函数, 不能调用它, 只能调用 Number(int) 构造函数 (s 由 short 转换为 int 类型 ), 所以输出 int 答案为 C 面试题 3-9 有程序如下: #include <iostream> using namespace std; class B private: int data; 102

10 第 3 章类和对象 Ⅱ B() cout << "defualt constructor" << endl; B(int i):data(i) cout << "constructed by parameter " << data << endl; ~B() cout << "destructed" << endl; ; B Play(B b) return b; int main () B temp=play(5); return 0; 回答以下问题 : (1) 该程序的输出结果是什么? 为什么会有这样的输出? (2)B(int i) : data(i) 这种用法的专业术语叫什么? (3) 对于 Play(5), 形参类型是类对象, 而 5 是一个常量, 这样写合法吗? 为什么? 答 :(1) 该程序的输出结果如下 constructed by parameter 5 destructed destructed 在执行 B temp=play(5) 时调用普通函数 Play, 实参数 5 通过隐含的类型转换调用类 B 的带参构造函数创建对象 b, 其 data 数据成员设置为 5, 并输出上述第 1 行 函数 Play 返回对象 b, 并调用拷贝构造函数由对象 b 创建对象 temp 函数 Play 执行完毕调用析构函数销毁对象 b, 输出上述第 2 行 main 执行完毕调用析构函数销毁对象 temp, 输出上述第 3 行 (2) 在类 B 的带参构造函数中冒号后面的 B(int i):data(i) 是成员变量初始化列表 (3) 合法 单个参数的构造函数如果不添加 explicit 关键字会进行隐式类型转换, 如果添加 explicit 关键字会消除这种隐式转换 3.3 子对象 要点归纳 当一个类的数据成员是另一个类的对象时, 这个对象称为子对象 子对象可以像普通对象那样使用, 唯一要考虑的是子对象构造函数和析构函数的执行次序 103

11 直击招聘 程序员面试笔试 C ++ 语言深度解析 1.has-a 关系 如果在类 A 的声明中将类 B 的对象作为数据成员, 也就是说类 A 有一个类 B 的对象 ( 即子对象 ), 则称类 A 和类 B 之间是一种 has-a 关系, 形如 : class B ; B obj; ; // 声明类 A // 声明类 B //obj 是类 B 的对象 是类 A 的子对象 这种 has-a 关系是一种组合关系, 通常用图 3.1 表示, 从类 B 的结点画一条线到类 A 的结点, 并在类 A 的结点的一端标记一个实心小圆 类 B 类 A 图 3.1 两个类的 has-a 关系图示 2. 子对象构造函数的设计和执行次序当子对象的类 B 含有构造函数时, 在声明类 A 中若定义有 n 个对象成员, 则其构造函数的一般格式如下 : 类名 :: 类名 ( 形参表 ): 子对象名 1( 实参表 1)[, 子对象名 2( 实参表 2),, 子对象名 n( 实参表 n)] // 构造函数体 其中, 子对象名 1( 实参表 1)[, 子对象名 2( 实参表 2),, 子对象名 n( 实参表 n)] 为子对象成员初始化表 对上述构造函数的几点说明如下 : 形参必须带有类型声明, 而实参是可计算值的表达式 对象成员构造函数的调用顺序取决于这些子对象成员在类中的定义顺序, 而与它们在成员初始化表中的位置无关 在建立类对象时先调用各个对象成员的构造函数, 初始化相应的子对象成员, 然后才执行类的构造函数体, 初始化本类中的其他数据成员 一般地析构函数的调用顺序与构 104

12 第 3 章类和对象 Ⅱ 造函数正好相反 3. 子对象析构函数的设计和执行次序同样, 当含有子对象的类存在析构函数时特别要注意析构函数的调用次序 在含有子对象的类 A 中设计析构函数如下 : ~A() 函数体 ; 其执行次序是先执行函数体, 再以子对象在类 A 中说明的相反次序调用各类的析构函数 例如有以下程序 : class B private: int b; B() b=0; cout << b << ", 调用 B 默认的构造函数 " << endl; B(int i) b=i; cout << b << ", 调用 B 的构造函数 " << endl; ~B() cout << b << ", 调用 B 的析构函数 "<< endl; ; private: B one,two; int a; A() a=0; cout << a << ", 调用 A 默认的构造函数 " << endl; A(int i,int j,int k ):two(i+j),one(k) a=i; cout << a << ", 调用 A 的构造函数 " << endl; 105

13 直击招聘 程序员面试笔试 C ++ 语言深度解析 ~A() cout << a << ", 调用 A 的析构函数 " << endl; ; A obj(1,2,4); 程序的执行结果如下 : 4, 调用 B 的构造函数 3, 调用 B 的构造函数 1, 调用 A 的构造函数 1, 调用 A 的析构函数 3, 调用 B 的析构函数 4, 调用 B 的析构函数因为在建立类的对象时先调用各个对象成员的构造函数 ( 调用顺序取决于对象成员在类中的定义顺序 ), 然后才执行类的构造函数, 所以在本例中建立类 A 的对象 obj 时首先调用对象成员 one 的构造函数 B(int i), 然后调用对象成员 two 的构造函数 B(int i), 最后调用类 A 的构造函数 A() 析构函数的调用顺序与构造函数正好相反 4. 静态子对象在一个类中可以定义另外一个类的静态子对象, 静态子对象需要在类外初始化 初始化格式如下 : 子对象类名所属类 :: 静态子对象名 [( 参数表 )] 如果调用默认的构造函数创建子对象, 则不包含 ( 参数表 ), 否则需要包含它 静态子对象属于类对象, 和 int 等类型的静态数据成员类似, 所不同的是在销毁时需要调用析构函数 例如有以下程序 : A() cout << "A 构造函数 " << endl; ~A() cout << "A 析构函数 " << endl; ; class B static A obj; // 静态子对象 B() cout << "B 构造函数 " << endl; 106

14 第 3 章类和对象 Ⅱ ~B() cout << "B 析构函数 " << endl; ; A B::obj; // 在类体外初始化静态子对象 cout << "main() 开始 " << endl; B b; cout << "main() 结束 " << endl; 程序的执行结果如下 : A 构造函数 main() 开始 B 构造函数 main() 结束 B 析构函数 A 析构函数第 1 行是创建静态子对象 obj 调用默认构造函数的输出, 最后一行是销毁静态子对象 obj 调用默认析构函数的输出, 即类的静态子对象具有全局变量的某些特征 5. 前向引用声明 C++ 中的类通常是先声明后使用 有时大家会遇到两个类相互引用的情况, 这时必然要有一个类在声明之前就被引用, 解决这一问题的方法是使用前向引用声明 前向引用声明是在引用未声明的类之前对该类进行预声明, 它只是为程序引入一个代表该类的标识符, 类的具体声明可以在程序的其他地方 例如有以下程序 : class B; // 前向引用声明 //A 类的声明 void fa(b b); // 以 B 类对象 b 为形参的成员函数声明 void dispa() cout << "" << endl; ; class B //B 类的声明 void fb(a a) a.dispa(); // 以 A 类对象 a 为形参的成员函数声明 void dispb() cout << "class B" << endl; ; 107

15 直击招聘 程序员面试笔试 C ++ 语言深度解析 void A::fa(B b) b.dispb(); A a; B b; a.fa(b); b.fb(a); 程序的执行结果如下 : class B 上述程序的第 2 行给出了类 B 的前向引用声明, 表明 B 是一个类, 它具有类的一切属性, 具体的声明在其他地方 但要注意的是, 前向引用声明仅引入一个代表类的标识符, 在没有遇到该类标识符的实际声明之前不能使用该类的任何成员 例如在上例中类 A 的 fa 函数以类 B 对象作为形参, 而类 B 采用了前向引用声明, 所以是正确的, 但 fa 成员函数的实现必须放在类 B 的声明之后, 否则会出现不能识别类 B 的错误 面试真题解析 面试题 3-10 两个互相独立的类 A 和 B 各自定义了非静态公有成员函数 PublicFunc() 和非静态的私有成员函数 PrivateFunc(), 现在要在类 A 中增加一个成员函数 A::AdditionalPunction(A a,b b), 则可以在其实现部分 ( 函数体内部 ) 出现的合法的表达式最全的是 ( ) A.a.PrivateFunc() a.publicfunc() b.privatefunc() b.publicfunc() B.a.PrivateFunc() a.publicfunc() b.publicfunc() C.a.PrivateFunc() b.privatefunc() b.publicfunc() D.a.PublicFunc() b.publicfunc() 答 : 在类 A 的成员函数 AdditionalPunction 中可以调用类 A 的任何成员函数, 即 a.privatefunc() a.publicfunc() 是合法的, 也可以调用子对象 b 的公有成员函数, 即 b.publicfunc() 是合法的, 但不能调用子对象 b 的私有成员函数, 即 b.privatefunc() 是不合法的 答案为 B 面试题 3-11 以下代码执行时可能得到的结果是( ) 108

16 第 3 章类和对象 Ⅱ ; int i; class B A *p; ; B() p=new A; ~B() delete p; void sayhello(b b) B b; sayhello(b); A. 程序正常运行 B. 程序编译错误 C. 程序崩溃 D. 程序死循环答 : 在 main 中定义类 B 的对象 b, 调用类 B 的构造函数, 为子对象指针 p 创建指向的实例 当执行 sayhello(b) 时将实参 b 赋给形参 b, 采用的是浅复制, 形参 b 和实参 b 的 p 都指向相同的实例,sayHello 函数执行完毕, 销毁形参 b 调用析构函数将 p 指向的实例释放 当 main 执行完毕, 销毁实参 b 调用析构函数释放 p 指向的实例 ( 前面已经被释放 ) 时出现程序崩溃 答案为 C 3.4 嵌套类和局部类 要点归纳 1. 嵌套类 用户可以在一个类声明中声明其他类, 这种在其他类中声明的类称为嵌套类, 包含嵌套类的类称为外围类 其层次结构如下 : class OuterClass private: // 称为外围类 109

17 直击招聘 程序员面试笔试 C ++ 语言深度解析 ; class InnerClass // 称为嵌套类 有关嵌套类和外围类的说明如下 : 嵌套类可以是公有的, 也可以是私有的 如果嵌套类是私有的, 那么嵌套类就不能在其外围类之外使用 ; 如果嵌套类是公有的, 那么嵌套类可以在外围类之外使用, 但此时嵌套类的类型应该是 OuterClass::InnerClass 嵌套类可以通过定义引用 指针或者对象来访问外围类的成员, 不管该成员是 public private 还是 protected 嵌套类仅是语法上的嵌入, 嵌套类的成员不是外围类中对象的成员, 反之亦然 嵌套类的成员函数对外围类的成员没有访问权, 反之亦然 例如有以下程序 : #include <string.h> // 外围类 class B // 嵌套类 int no; char name[10]; void setb(int n,char na[]) no=n; strcpy(name,na); void dispb() cout << "no:" << no << ",name:" << name << endl; ; B b; // 类 A 的数据成员 b 是类 B 的对象 void seta(int n,char na[]) b.setb(n,na); void dispa() b.dispb(); ; A a; a.seta(2,"mary"); a.dispa(); 110

18 第 3 章类和对象 Ⅱ 在上述程序中声明了一个外围类 A, 其中包含一个嵌套类, 类 A 的私有数据成员是类 B 的对象 程序的执行结果如下 : no:2 name:mary 2. 局部类 一个类的声明还可以在某一个函数定义中, 这种类称为局部类, 局部类的声明限制在函数定义中 局部类不包含静态成员, 并且所有成员函数都必须定义在类体内 通常局部类很少使用 例如有以下程序 : #include <string.h> void fun(int n,char na[]) class B int no; char name[10]; B(int n,char na[]) no=n; strcpy(name,na); ; B b(n,na); b.dispb(); // 局部类 // 局部类构造函数 void dispb() cout << "no:" << no << ",name:" << name << endl; fun(2,"mary"); // 定义局部类的对象 // 调用局部类的成员函数 在上述程序中定义了一个函数 fun, 其中声明了一个局部类 B, 并定义了类 B 的一个对象 b, 通过对象 b 调用相应的成员函数 程序的执行结果如下 : no:2 name:mary 面试真题解析 面试题 3-12 说明 C++ 中局部类和嵌套类的区别 111

19 直击招聘 程序员面试笔试 C ++ 语言深度解析 答 : 在一个函数体内定义的类称为局部类 在局部类中只能使用它的外围作用域中的对象和函数进行联系, 因为外围作用域中的变量与该局部类的对象无关 局部类的所有成员都必须定义在类体内 在一个类中声明的类称为嵌套类, 从作用域的角度看, 嵌套类被隐藏在外围类之中, 该类名只能在外围类中使用, 如果在外围类的作用域内使用该类名, 需要加名字限定 从访问权限的角度来看, 嵌套类名与它的外围类的对象成员名具有相同的访问权限规则, 不能访问嵌套类的对象中的私有成员函数, 也不能对外围类的私有嵌套类建立对象 嵌套类中的成员函数可以在它的类体外定义 面试题 3-13 说明嵌套类的主要作用 答 : 定义嵌套类的作用在于隐藏类名, 减少全局的标识符, 从而限制用户能否使用该类建立对象, 这样可以提高类的抽象能力, 并且强调了两个类 ( 外围类和嵌套类 ) 之间的主从关系 面试题 3-14 在软件开发中有一种单例模式, 即在应用中仅允许创建类的一个实例 那么如何采用 C++ 实现单例模式? 答 : 单例模式也称为单件模式, 设计它的意图是保证一个类仅有一个实例, 并提供类的一个全局访问点, 该实例被所有程序模块共享 说明 : 由于在 VC 中嵌套类不能访问外围类的静态私有数据成员, 而在 Dev C++ 中可以, 本面试题的程序是在 Dev C++ 中调试执行的 采用 C++ 实现单例模式有多种方式, 这里采用嵌套类实现, 其程序如下 : #include <iostream> using namespace std; // 其他数据成员 static A *GetInstance() if(pinstance==null) pinstance=new A(); return pinstance; private: static A *pinstance; class B // 单例模式类 A // 返回唯一实例的指针 // 指向类 A 实例的指针 // 嵌套类, 它的唯一工作就是在析构函数中释放实例 112

20 第 3 章类和对象 Ⅱ ~B() if(a::pinstance!=null) // 访问外围类的静态私有数据成员 delete A::pinstance;// 在 VC 中不允许, 在 Dev C++ 中可以 cout << " 释放实例 " <<endl; ; static B b; // 定义一个子对象, 在程序结束时会调用它的析构函数 ; A *A::pinstance=NULL; // 静态子对象指针初始化 A::B A::b; // 静态子对象初始化 int main() A *p=a::getinstance(); A *q=a::getinstance(); if (p==q) cout << "Same" << endl; return 0; 其中类 A 实现单例模式, 对其说明如下 : 它的构造函数是私有的, 这样就不能从别处创建该类的实例 它有一个唯一实例的静态对象指针 pinstance, 且是私有的 它有一个公有成员函数 GetInstance, 可以获取这个唯一的实例, 并在需要的时候创建该实例 设计嵌套类的目的是为了定义它的静态子对象, 在程序结束时会调用该子对象的析构函数以释放唯一的实例 如果采用在类 A 中设计析构函数来释放实例, 则该析构函数必须是公用的, 这在单例模式中是不恰当的 上述程序的设计特征如下 : 在单例类 A 的内部声明专门的私有嵌套类 在嵌套类 B 内定义专门用于释放实例的析构函数 利用程序在结束时销毁静态子对象的特性选择最终的释放时机 使用 C++ 单例模式的代码不需要其他操作, 不必关心对象的释放 上述程序的执行结果如下 : Same 释放实例从结果可以看出类 A 的两个对象指针指向同一个实例, 说明只能创建唯一的实例, 并且该唯一实例是自动销毁的 113

21 直击招聘 程序员面试笔试 C ++ 语言深度解析 3.5 自测题和参考答案 自测题 3-1 说明 explicit 关键字的含义和作用 3-2 如果一个类的成员函数 print() 不修改类的数据成员值, 应将其声明为 ( ) A.void print() const; B.const void print(); C.void const print(); D.void print(const); 3-3 以下关于嵌套类的叙述中正确的是 ( ) A. 嵌套类可以像普通类那样在外围类之外使用, 例如定义其对象 B. 嵌套类的所有成员可以被看成是外围类的成员 C. 嵌套类中的成员函数可以直接访问外围类的成员 D. 以上都不对 3-4 阅读下面类的定义, 找出程序中的错误, 并说明错误原因 class Sample int x,y,c; Sample(int i=0,int j=0); void f() const; ; void Sample::f() const cout << x << " " << y << endl; c++; 3-5 指出以下程序中存在的问题 #include <iostream> using namespace std; int *p; int size; A():size(4),p(new int[size]) 114

22 第 3 章类和对象 Ⅱ for(int i=0;i<size;++i) p[i]=i; void display() for(int i=0;i<size;i++) cout << p[i] << " "; cout << endl; ; int main() A a; a.display(); return 1; 3-6 以下 C++ 代码的输出是什么? private: int n1; int n2; A(): n2(0),n1(n2+2) void Print() cout << "n1:" << n1 << ",n2:" << n2 << endl; ; A a; a.print(); 3-7 给出以下程序的执行结果 int n; A(int i) cout << "A 构造函数 " << endl; n=i; ~A() cout << "A 析构函数 " << endl; void dispa() cout << "n=" << n << endl; ; 115

23 直击招聘 程序员面试笔试 C ++ 语言深度解析 class B A a,b; int m; B(int i,int j):m(j),a(i),b(2*a.n) cout << "B 构造函数 " << endl; ; void dispb() a.dispa(); b.dispa(); cout << "m=" << m << endl; ~B() cout << "B 析构函数 " << endl; B obj(1,3); obj.dispb(); 3-8 给出以下程序的执行结果 private: int n; ; A(int n) this->n=n; cout << "A constructor" << endl; void show() cout << n << endl; class B ; B b; A a=1; B() cout << "B constructor" << endl; void disp() cout << "B disp" << endl; a.show(); a.b.disp(); 116

24 第 3 章类和对象 Ⅱ 3-9 下面的代码实现了设计模式中的 ( ) 模式 A *pinstance; A() static A *GetInstance() ; if (pinstance==null) pinstance=new A(); return pinstance; A.Factory B.Abstract Factory C.Singleton D.Builder 参考答案 3-1 答 :explicit 关键字禁止单参数构造函数的隐式转换, 防止程序员误操作 3-2 答 : 将其声明为 const 成员函数 答案为 A 3-3 答 : 只有公有嵌套类才可以在外围类之外使用 嵌套类的成员并不是外围类的成员 嵌套类可以通过定义引用 指针或者对象来访问外围类的成员 答案为 D 3-4 答 : 类成员函数 Sample() 被定义为常成员函数, 因此它不能修改对象的数据成员, 即 C++ 是不适合的 修改方法是将 Sample() 常成员函数改为普通成员函数 3-5 答 : 在程序中有两个问题, 一是类 A 中私有数据成员的定义顺序是先 p 后 size, 在调用构造函数时先执行成员初始化列表中的 p(new int[size]) 后执行 size(4), 前者执行时 size 为垃圾值, 分配空间失败 ( 尽管在 VC 和 Dev C++ 中测试没有问题, 原则上讲这样是错误的 ), 应该在类中将定义 p 和 size 的顺序倒过来 ; 二是 p 指向的空间没有释放, 应该设计一个含 delete p 语句的析构函数 3-6 答 : 在 C++ 中类数据成员的初始化顺序与其定义顺序相同, 而与它们在构造函数的成员初始化列表中的顺序无关, 因此首先初始化 n1, 但初始 n1 的实参 n2 还没有初始化, 是一个垃圾值, 所以 n1 就是一个垃圾值 ; 在初始化 n2 时根据参数 0 对其初始化, 故 n2=0, 所以程序的输出结果是 n1 为一个垃圾值,n2 为 答 : 类 B 有类 A 的两个子对象 a b 作为数据成员,a 在前 b 在后, 先后调用类 A 的构造函数创建它们, 再执行类 B 的构造函数体 析构函数调用的顺序与之相反 程序的执行结果如下 : 117

25 直击招聘 程序员面试笔试 C ++ 语言深度解析 A 构造函数 A 构造函数 B 构造函数 n=1 n=2 m=3 B 析构函数 A 析构函数 A 析构函数 3-8 答 : 类 B 是类 A 的嵌套类, 在本程序中仅用于定义类 A 的子对象 b, 和将类 B 的定义放在类 A 的外面是相同的 在创建类 A 的对象 a 时先调用子对象的构造函数, 再执行类 B 的构造函数体 程序的输出结果如下 : B constructor A constructor 1 B disp 3-9 答 : 类 A 的构造函数是私有的, 有唯一的对象指针 pinstance, 且是私有的, 有一个公有成员函数 GetInstance, 可以获取这个唯一的实例 它属于典型的单例模式 答案为 C 118

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx 运算符重载 Operator Overloading class Point { public: ; double x_, y_; Why Operator Overloading? Point (double x =0, double y = 0):x_(x),y_(y) { int main(){ Point a(1., 2), b(3,4); Point c = a + b; return 0;

More information

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 CIRCLE 1 Circle 描述 编写一个圆类 Circle, 实现半径的输入 面积的计算和输出 输入 圆的半径 (double 类型 ) 输出 圆的面积 ( 保留小数点后两位 ) 样例输入 3 样例输出 28.27 提示 圆周率的取值需要比较精确, 以保证计算结果的精度 #include

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

c_cpp

c_cpp C C++ C C++ C++ (object oriented) C C++.cpp C C++ C C++ : for (int i=0;i

More information

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 复习 创建对象 构造函数 函数重载 : 函数 = 函数名 + 参数列表 public class MyType { int i; double d; char c; void set(double x)

More information

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式]

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式] 函数 Function 如何重用代码 How to reuse code 3 4 = 3*3*3*3 3 4,6 5 : 拷贝 - 粘帖代码 (Copy-paste code) 3 4,6 5,12 10 : 拷贝 - 粘帖代码 (Copy-paste code) Bad! 使用函数 (with a function) 使用函数 (with a function) 使用函数 (with a function)

More information

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式]

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式] 用户定义类型 User-defined Datatypes classes and structs 几何向量 (Geometry Vector) 二维平面上的向量由起点和终点构成 每个点包含两个坐标 (x, y), 因此一个向量需要四个实数表示 Start= (0.9,1.5) Start= (0.4,0.8) int main() { double xstart = 0.4; double xend

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

幻灯片 1

幻灯片 1 第三课类和对象 ( 封装 ) 互联网新技术在线教育领航者 1 内容概述 1. 封装的概念 2. 访问控制 3. 栈类的封装 4. 构造与析构 5.myString 构造函数 6. 构造与析构的次序 7. 类文件写法 8. 对象的内存 9.this 指针初探 10. 构造函数初始值列表 11. 拷贝构造和赋值运算符重载 12. 浅拷贝 13. 深拷贝 14. 成员函数内联 15. 友元 16.const

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

幻灯片 1

幻灯片 1 信息科学技术学院 程序设计实习 郭炜微博 http://weibo.com/guoweiofpku http://blog.sina.com.cn/u/3266490431 刘家瑛微博 http://weibo.com/pkuliujiaying 1 信息科学技术学院 程序设计实习 郭炜刘家瑛 继承和派生 ( 教材 P215) 2 继承和派生的概念 继承 : 在定义一个新的类 B 时, 如果该类与某个已有的类

More information

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

第七讲 继承与多态

第七讲  继承与多态 第 七 章 继 承 与 派 生 1 本 章 主 要 内 容 的 继 承 成 员 的 访 问 控 制 单 继 承 与 多 继 承 派 生 的 构 造 析 构 函 数 成 员 的 标 识 与 访 问 深 度 探 索 2 的 继 承 与 派 生 的 继 承 与 派 生 保 持 已 有 的 特 性 而 构 造 新 的 过 程 称 为 继 承 在 已 有 的 基 础 上 新 增 自 己 的 特 性 而 产 生

More information

Chapter12 Derived Classes

Chapter12   Derived Classes 继 承 -- 派 生 类 复 习 1. 有 下 面 类 的 说 明, 有 错 误 的 语 句 是 : class X { A) const int a; B) X(); C) X(int val) {a=2 D) ~X(); 答 案 :C 不 正 确, 应 改 成 X(int val) : a(2) { 2. 下 列 静 态 数 据 成 员 的 特 性 中, 错 误 的 是 A) 说 明 静 态 数

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

Microsoft PowerPoint - string_kruse [兼容模式]

Microsoft PowerPoint - string_kruse [兼容模式] Strings Strings in C not encapsulated Every C-string has type char *. Hence, a C-string references an address in memory, the first of a contiguous set of bytes that store the characters making up the string.

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

Microsoft PowerPoint - 第06讲_继承.ppt [兼容模式]

Microsoft PowerPoint - 第06讲_继承.ppt [兼容模式] 程序设计实习 (I): C++ 程序设计 第六讲继承 上节内容回顾 三种运算符重载的实现方式 重载为普通函数 重载为成员函数 重载为友元 常见的运算符重载 流运算符 (>>

More information

Microsoft PowerPoint - 10 模板 Template.pptx

Microsoft PowerPoint - 10 模板 Template.pptx 模板 Tempalte 泛型编程的需要 Why Templates? 设想你对整数类型实现了一个排序算法 : void sort(int *is,int n); 用该函数可以对实 复数或工资单排序吗? 模板可以复用源代码 - 泛型编程. inline void Swap( int &x, int &y){ int t = x; x = y; y =t; inline void Swap(double

More information

程序设计语言及基础

程序设计语言及基础 Chapter 10 Classes: A Deeper Look, Part 2 http://jssec.seu.edu.cn 杨明 yangming2002@seu.edu.cn OBJECTIVES To specify const (constant) objects and const member functions. To create objects composed of other

More information

Microsoft PowerPoint - 04-Inheritance.ppt

Microsoft PowerPoint - 04-Inheritance.ppt 继承 派生与多态性 1 本章主要内容 类的继承与派生 类成员的访问控制 简单继承与多重继承 派生类的构造 析构函数 多态性 2 1 类的继承与派生 保持已有类的特性, 并在其基础上产生新的类, 称新类继承了已有类的特征, 或称已有类派生出新类 被继承的已有类称为基类 ( 或父类 ) 派生出的新类称为派生类 派生类将自动继承基类的所有特性 ( 属性和方法 ) 派生类可以定义新的特性 ( 属性和方法 )

More information

C/C++程序设计 - 字符串与格式化输入/输出

C/C++程序设计 - 字符串与格式化输入/输出 C/C++ / Table of contents 1. 2. 3. 4. 1 i # include # include // density of human body : 1. 04 e3 kg / m ^3 # define DENSITY 1. 04 e3 int main ( void ) { float weight, volume ; int

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

第3章.doc

第3章.doc 3 3 3 3.1 3 IT Trend C++ Java SAP Advantech ERPCRM C++ C++ Synopsys C++ NEC C C++PHP C++Java C++Java VIA C++ 3COM C++ SPSS C++ Sybase C++LinuxUNIX Motorola C++ IBM C++Java Oracle Java HP C++ C++ Yahoo

More information

Microsoft Word - 新1-12.doc

Microsoft Word - 新1-12.doc 实训 5 面向对象编程练习 实训 5 面向对象编程练习 5.1 实训目的 通过编程和上机实验理解 Java 语言是如何体现面向对象编程基本思想 以及如何创建类 和对象 了解成员变量和成员方法的特性 5.2 实训要求 编写一个体现面向对象思想的程序 编写一个创建对象和使用对象的方法的程序 5.3 实训内容 5.3.1 创建对象并使用对象 1 定义一个 Person 类 可以在应用程序中使用该类 成员属性

More information

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 第十一讲 运算符重载 与类型转换 运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 为什么要运算符重载 预定义的运算符只针对基本数据类型, 若要对类的对象进行类似的运算, 需要重新定义运算符的功能 运算符重载实质就是函数重载 : 对已有的运算符赋予多重含义, 使得同一个运算符作用于不同类型的数据时导致不同的行为

More information

模板

模板 制作人 : 张刚 目录 类和对象 面向对象程序设计基本特征 类的声明 构造方法 成员变量和方法 封装 继承 多态 包 访问控制 final static 抽象类和接口 内部类 沈阳工业大学软件学院 Java 课程教研组 Page 2 核心知识点 类 对象 三个基本特征 类的基本结构 成员变量 构造方法 成员方法 类实例 对象创建和操作 沈阳工业大学软件学院 Java 课程教研组 Page 3 1.

More information

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf (%d, & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf (%d %d 2013 18 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp, Compilation Error cin scanf Time Limit Exceeded 1: A 5 B 5 C 5 D 5 E 5 F 5 1 2013 C 1 # include 2 int main ( void ) 3 { 4 int cases, a, b,

More information

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p NOWOER.OM /++ 程师能 评估. 单项选择题 1. 下 描述正确的是 int *p1 = new int[10]; int *p2 = new int[10](); p1 和 p2 申请的空间 的值都是随机值 p1 和 p2 申请的空间 的值都已经初始化 p1 申请的空间 的值是随机值,p2 申请的空间 的值已经初始化 p1 申请的空间 的值已经初始化,p2 申请的空间 的值是随机值 2.

More information

untitled

untitled (encapsulation) 例 類 說 類 料 來 料 information hiding 念 (inheritance) 來說 類 類 類 類 類 類 行 利 來 (polymorphism) 不 類 數 不 1 2 3 4 類 類 不 類 不 類 5 6 7 // virtual 不見了 #include #include using namespace

More information

C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 PERSON 1 Person 题目描述 编写程序, 定义一个基类 Person, 包含 name 和 age 两个数据成员 ; 再由它派生出学生类 Student 和教师类 Teacher, 其中学生类添加学号 no 数据, 教师类添加职称 title 数据 ; 要求每个类均有构造函数 析构函数和显示数据的函数

More information

untitled

untitled 3 C++ 3.1 3.2 3.3 3.4 new delete 3.5 this 3.6 3.7 3.1 3.1 class struct union struct union C class C++ C++ 3.1 3.1 #include struct STRING { typedef char *CHARPTR; // CHARPTR s; // int strlen(

More information

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式] Arrays and Strings 存储同类型的多个元素 Store multi elements of the same type 数组 (array) 存储固定数目的同类型元素 如整型数组存储的是一组整数, 字符数组存储的是一组字符 数组的大小称为数组的尺度 (dimension). 定义格式 : type arrayname[dimension]; 如声明 4 个元素的整型数组 :intarr[4];

More information

C/C++语言 - C/C++数据

C/C++语言 - C/C++数据 C/C++ C/C++ Table of contents 1. 2. 3. 4. char 5. 1 C = 5 (F 32). 9 F C 2 1 // fal2cel. c: Convert Fah temperature to Cel temperature 2 # include < stdio.h> 3 int main ( void ) 4 { 5 float fah, cel ;

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式] 指针 Pointers 变量指针与指针变量 Pointer of a variable 变量与内存 (Variables and Memory) 当你声明一个变量时, 计算机将给该变量一个内存, 可以存储变量的值 当你使用变量时, 计算机将做两步操作 : - 根据变量名查找其对应的地址 ; - 通过地址对该地址的变量内容进行读 (retrieve) 或写 (set) 变量的地址称为变量的指针! C++

More information

第五讲 C++程序的结构

第五讲 C++程序的结构 第五章数据的共享与保护 本章主要内容 作用域与可见性 对象的生存期 数据与函数 静态成员 共享数据的保护 友元 编译预处理命令 多文件结构和工程 深度探索 2 命名空间作用域作用域与可见性标识符的作用域 标识符在程序正文中有效的区域 函数原型作用域 局部作用域 类作用域 3 作用域与可见性函数原型的作用域 函数原型中的参数, 其作用域始于 "(", 结束于 ")" 例如, 设有下列原型声明 : double

More information

新版 明解C++入門編

新版 明解C++入門編 511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,

More information

<4D F736F F F696E74202D20B5DA3032BDB25FC0E0BACDB6D4CFF3312E BBCE6C8DDC4A3CABD5D>

<4D F736F F F696E74202D20B5DA3032BDB25FC0E0BACDB6D4CFF3312E BBCE6C8DDC4A3CABD5D> 程序设计实习 (I): C++ 程序设计 第二讲类和对象 (1) 面向对象的程序设计 面向对象的程序设计方法, 能够较好解决结构化程序设计中出现的问题 面向对象的程序 = 类 + 类 + + 类 设计程序的过程, 就是设计类的过程 2 面向对象的程序设计 面向对象的程序设计方法 : 将某类客观事物共同特点 ( 属性 ) 归纳出来, 形成一个数据结 构 ( 可以用多个变量描述事物的属性 ); 将这类事物所能进行的行为也归纳出来,

More information

C++ 程序设计 实验 1 - 参考答案 MASTER 2017 年 5 月 21 日 1

C++ 程序设计 实验 1 - 参考答案 MASTER 2017 年 5 月 21 日 1 C++ 程序设计 实验 1 - 参考答案 MASTER 2017 年 5 月 21 日 1 1 简单图形 1 简单图形 输入图形的行数 ( 如下图 7 行 ), 输出如下图所示图形 * *** ***** ******* ***** *** * 2 1 简单图形 1 #inc lude 2 using namespace std ; 3 4 // 注意变量命名的方式 5 //

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf (%d, & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9 201 201 21 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp Compilation Error long long cin scanf Time Limit Exceeded 1: A 1 B 1 C 5 D RPG 10 E 10 F 1 G II 1 1 201 201 C 1 # include 2 int main ( void

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN:978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p=&a 2. 设已定义 int x,*p=&x;, 则下列表达式中错误的是 :B)&*x 3. 若已定义 int a=1,*b=&a;,

More information

幻灯片 1

幻灯片 1 第四课类和对象 ( 构造深入 ) 互联网新技术在线教育领航者 1 内容概述 1. 数据成员指针 2. 成员函数指针 3. 三 / 五法则 4. 引用计数 5. 写时拷贝 6.swap 函数 7. 移动构造函数 8. 移动赋值运算符重载 9. 对象移动 10.std::vector 动态增长 11.std::vector 与移动 12. 移动小结 互联网新技术在线教育领航者 2 数据成员指针 定义 :

More information

程序设计与算法语言 拷贝构造 C/C++ Programming and Algorithms Copy Constructor Dongke Sun ( 孙东科 ) 东南大学机械工程学院 School of Mechanical Engineering South

程序设计与算法语言 拷贝构造 C/C++ Programming and Algorithms Copy Constructor Dongke Sun ( 孙东科 ) 东南大学机械工程学院 School of Mechanical Engineering South 程序设计与算法语言 拷贝构造 C/C++ Programming and Algorithms Copy Constructor Dongke Sun ( 孙东科 ) dksun@seu.edu.cn 东南大学机械工程学院 School of Mechanical Engineering Southeast University Spring semester, 2019 视 C++ 为一个语言联邦

More information

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public

More information

提纲 1 联编与多态性 2 用虚函数实现多态 3 虚函数的工作原理 4 纯虚函数与抽象类 5 总结与思考 Dongke Sun (Southeast University) C++ Programming and Algorithms April 12, / 36

提纲 1 联编与多态性 2 用虚函数实现多态 3 虚函数的工作原理 4 纯虚函数与抽象类 5 总结与思考 Dongke Sun (Southeast University) C++ Programming and Algorithms April 12, / 36 程序设计与算法语言 虚函数 C/C++ Programming and Algorithms Virtual Function Dongke Sun ( 孙东科 ) dksun@seu.edu.cn 东南大学机械工程学院 School of Mechanical Engineering Southeast University April 12, 2018 提纲 1 联编与多态性 2 用虚函数实现多态

More information

没有幻灯片标题

没有幻灯片标题 指针作为函数参数 : 原因 : 1 需要修改一个或多个值,( 用 return 语句不能解决问题 ) 2 执行效率的角度 使用方法 : 在函数原型以及函数首部中需要声明能够接受指针值的形参, 具体的写法为 : 数据类型 * 形参名 如果有多个指针型形参, 则用逗号分隔, 例如 : void swap(int *p1, int *p2) 它说明了形参 p1 p2 是指向整型变量的指针 在函数调用时,

More information

提问袁小兵:

提问袁小兵: C++ 面 试 试 题 汇 总 柯 贤 富 管 理 软 件 需 求 分 析 篇 1. STL 类 模 板 标 准 库 中 容 器 和 算 法 这 部 分 一 般 称 为 标 准 模 板 库 2. 为 什 么 定 义 虚 的 析 构 函 数? 避 免 内 存 问 题, 当 你 可 能 通 过 基 类 指 针 删 除 派 生 类 对 象 时 必 须 保 证 基 类 析 构 函 数 为 虚 函 数 3.

More information

C++ 程序设计 实验 2 - 参考答案 MASTER 2017 年 5 月 21 日 1

C++ 程序设计 实验 2 - 参考答案 MASTER 2017 年 5 月 21 日 1 C++ 程序设计 实验 2 - 参考答案 MASTER 2017 年 5 月 21 日 1 1 CRECT 类 1 CRect 类 设计矩形类, 包含 长度和宽度信息 基本构造函数 基础属性的访问接口 ( 读 / 写, Read/Write, Get/Set) 计算周长和面积 ( 注 : 基本构造函数, 一个无参数的默认构造函数, 以及一个初始化数据成员的构造函数如果数据成员的初始化有多种形式, 就提供多个构造函数

More information

untitled

untitled 1 7 7.1 7.2 7.3 7.4 7.5 2 7.1 VFT virtual 7.1 3 1 1. 2. public protected public 3. VFT 4. this const volatile 4 2 5. ( ) ( ) 7.1 6. no-static virtual 7.2 7. inline 7.3 5 3 8. this this 9. ( ) ( ) delete

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class - Table.class

More information

Microsoft Word - word模板-教师.doc

Microsoft Word - word模板-教师.doc 传智播客 Java 基础入门 教学设计 课程名称 : Java 基础入门 授课年级 : 2014 年级 授课学期 : 2014 学年第一学期 教师姓名 : 某某老师 2014 年 02 月 09 日 课题名称内容分析教学目标及基本要求重点及措施难点及措施 计划第 3 章面向对象上 6 课时学时 Java 是一种面向对象的语言, 认识面向对象的编程思想对于 Java 学习至关重要 在面向对象中, 有两个重要的概念,

More information

Microsoft PowerPoint - L17_Inheritance_v4.pptx

Microsoft PowerPoint - L17_Inheritance_v4.pptx C++ Programming Lecture 17 Wei Liu ( 刘 威 ) Dept. of Electronics and Information Eng. Huazhong University of Science and Technology May. 2015 Lecture 17 Chapter 20. Object-Oriented Programming: Inheritance

More information

Microsoft PowerPoint - 07 派生数据类型

Microsoft PowerPoint - 07 派生数据类型 能源与动力工程学院 目录 派生类型 陈 斌 固有数据类型 数值型 (numerical) 整型 INTEGER 实型 REAL 复数型 COMPLEX 非数值型 字符型 CHARACTER 逻辑型 ( 布尔型 )LOGICAL 自定义数据类型 ( 派生类型, derived type) 派生类型是指用户利用 Fortran 系统内部类型, 如整型 实型 复数型 逻辑型 字符型等的组合自行创建出一个新的数据类型,

More information

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3 浙江大学 C 程序设计及实验 试题卷 2002-2003 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:30-10:30 注意 : 答题内容必须写在答题卷上, 写在本试题卷上无效 一. 单项选择题 ( 每题 1 分, 共 10 分 ) 1. 下列运算符中, 优先级最低的是 A.

More information

教案模板4-2

教案模板4-2 传智播客 Java 基础入门 教学设计 课程名称 : Java 基础入门 授课年级 : 2014 年级 授课学期 : 2014 学年第一学期 教师姓名 : 某某老师 2014 年 02 月 09 日 课题名称第 3 章面向对象上 计划学时 6 课时 Java 是一种面向对象的语言, 认识面向对象的编程思想对于 Java 学习至关重 内容分析 要 在面向对象中, 有两个重要的概念, 分别是类和对象,

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点

OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点 复习 : Java 类型 基本类型 boolean, char, 封装 (wrappers) 类 (class) 定义 class MyType { int i; double d; 数据 (Fields) char c; void set(double

More information

软件工程文档编制

软件工程文档编制 实训抽象类 一 实训目标 掌握抽象类的定义 使用 掌握运行时多态 二 知识点 抽象类的语法格式如下 : public abstract class ClassName abstract void 方法名称 ( 参数 ); // 非抽象方法的实现代码 在使用抽象类时需要注意如下几点 : 1 抽象类不能被实例化, 实例化的工作应该交由它的子类来完成 2 抽象方法必须由子类来进行重写 3 只要包含一个抽象方法的抽象类,

More information

《C语言程序设计》第2版教材习题参考答案

《C语言程序设计》第2版教材习题参考答案 教材 C 语言程序设计 ( 第 2 版 ) 清华大学出版社, 黄保和, 江弋编著 2011 年 10 月第二版 ISBN:978-7-302-26972-4 售价 :35 元 答案版本 本习题答案为 2012 年 2 月修订版本 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p = &a A. *p = *a B. p = *a C.p = &a D. *p =

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public char

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public char

More information

C++_Lecture

C++_Lecture C++ 程序设计 张岳新编著 苏州大学出版社 1 第十一章 继承和派生类 2 继承性是面向对象程序设计中最重要的机制 这种机制提供了无限重复利用程序资源的一种途径 通过 C++ 语言中的继承机制, 可以扩充和完善旧的程序设计以适应新的需求 这样不仅可以节省程序开发的时间和资源, 并且为未来程序增添了新的资源 3 class Student { int num; char name[30]; char

More information

OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢

OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 复习 : Java 类型 基本类型 boolean, char, 封装 (wrappers) 类 (class) 定义 class MyType { int i;

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac)

OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac) OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac) 复习 面向对象编程 将实际问题分解成不同的对象 不的对象提供不同的服务 对象之间可以传递消息 例子小李深夜

More information

面向对象的程序设计 : 抽象 继承和多态 Dongke Sun (Southeast University) C++ Programming and Algorithms April 12, / 38

面向对象的程序设计 : 抽象 继承和多态 Dongke Sun (Southeast University) C++ Programming and Algorithms April 12, / 38 程序设计与算法语言 继承与派生 C/C++ Programming and Algorithms Inheritance and Derivation Dongke Sun ( 孙东科 ) dksun@seu.edu.cn 东南大学机械工程学院 School of Mechanical Engineering Southeast University April 12, 2018 面向对象的程序设计

More information

Strings

Strings Inheritance Cheng-Chin Chiang Relationships among Classes A 類 別 使 用 B 類 別 學 生 使 用 手 機 傳 遞 訊 息 公 司 使 用 金 庫 儲 存 重 要 文 件 人 類 使 用 交 通 工 具 旅 行 A 類 別 中 有 B 類 別 汽 車 有 輪 子 三 角 形 有 三 個 頂 點 電 腦 內 有 中 央 處 理 單 元 A

More information

3.1 num = 3 ch = 'C' 2

3.1 num = 3 ch = 'C' 2 Java 1 3.1 num = 3 ch = 'C' 2 final 3.1 final : final final double PI=3.1415926; 3 3.2 4 int 3.2 (long int) (int) (short int) (byte) short sum; // sum 5 3.2 Java int long num=32967359818l; C:\java\app3_2.java:6:

More information

立 志 于 打 造 最 贴 近 考 生 实 际 的 辅 导 书 计 算 机 考 研 之 数 据 结 构 高 分 笔 记 率 辉 编 著 周 伟 张 浩 审 核 讨 论 群 :15945769

立 志 于 打 造 最 贴 近 考 生 实 际 的 辅 导 书 计 算 机 考 研 之 数 据 结 构 高 分 笔 记 率 辉 编 著 周 伟 张 浩 审 核 讨 论 群 :15945769 立 志 于 打 造 最 贴 近 考 生 实 际 的 辅 导 书 计 算 机 考 研 之 数 据 结 构 高 分 笔 记 率 辉 编 著 周 伟 张 浩 审 核 讨 论 群 :15945769 前 言 在 计 算 机 统 考 的 四 门 专 业 课 中, 最 难 拿 高 分 的 就 是 数 据 结 构 但 是 这 门 课 本 身 的 难 度 并 不 是 考 生 最 大 的 障 碍, 真 正 的 障 碍

More information

Strings

Strings Polymorphism and Virtual Functions Cheng-Chin Chiang Virtual Function Basics 多 型 (Polymorphism) 賦 予 一 個 函 數 多 種 意 涵, 存 在 於 同 一 類 別 之 內 祖 先 類 別 與 後 代 類 別 間 物 件 導 向 程 式 設 計 基 本 原 理 虛 擬 函 數 (Virtual Function)

More information

4. if 与 else 在使用过程中为避免嵌套出现二义性,C++ 中规定与 else 子句配对的是 ( ) A. 其之前最近的 if 语句 B. 其之前最近且尚未配对的 if 语句 C. 缩排位置相同的 if 语句 D. 其之后最近的 if 语句答案 :B 解析 :C++ 中规定与 else 子句

4. if 与 else 在使用过程中为避免嵌套出现二义性,C++ 中规定与 else 子句配对的是 ( ) A. 其之前最近的 if 语句 B. 其之前最近且尚未配对的 if 语句 C. 缩排位置相同的 if 语句 D. 其之后最近的 if 语句答案 :B 解析 :C++ 中规定与 else 子句 计算机 -C++ 程序设计 ( 本科 ) 2017 年 10 月真题及答案解析 单项选择题 : 本大题共 20 小题 每小题 1 分, 共 20 分 1. 按照标识符的要求, 不能组成标识符的符号是 ( ) A. 连接符 B. 下划线 C. 大小写字母 D. 数字字符答案 :A 解析 : 组成标识符的符号可以是大小写字母 下划线和数字, 且数字不能打头 2. 下列输出语句中, 正确的是 ( ) A.

More information

Microsoft Word - 第2章.doc

Microsoft Word - 第2章.doc 2 第第 2 章 学习第 1 章后, 读者已经对 Java 语言有了初步的了解, 本章将具体解析 Java 类的组成元素 任何一个 Java 类, 都有 5 种基本组成元素 : 属性 方法 构造方法 块和内部类 其中属性 方法 构造方法是使用最多的元素, 而块 内部类使用较少 本章将对各种元素进行学习 Java 类基本结构 2.1 类 类 Java 类的声明形式 访问权限修饰符 修饰符 class

More information

Modeling & Simulation 数学原理 物理规律和程序设计的综合 Magic Fluids Heart Simulator Dongke Sun (Southeast University) C++ Programming and Algorithms April 23,

Modeling & Simulation 数学原理 物理规律和程序设计的综合 Magic Fluids Heart Simulator Dongke Sun (Southeast University) C++ Programming and Algorithms April 23, 程序设计与算法语言 继承与派生 C/C++ Programming and Algorithms Inheritance and Derivation Dongke Sun ( 孙东科 ) dksun@seu.edu.cn 东南大学机械工程学院 School of Mechanical Engineering Southeast University April 23, 2018 Modeling

More information

untitled

untitled 不 料 料 例 : ( 料 ) 串 度 8 年 數 串 度 4 串 度 數 數 9- ( ) 利 數 struct { ; ; 數 struct 數 ; 9-2 數 利 數 C struct 數 ; C++ 數 ; struct 省略 9-3 例 ( 料 例 ) struct people{ char name[]; int age; char address[4]; char phone[]; int

More information

Microsoft Word - ch04三校.doc

Microsoft Word - ch04三校.doc 4-1 4-1-1 (Object) (State) (Behavior) ( ) ( ) ( method) ( properties) ( functions) 4-2 4-1-2 (Message) ( ) ( ) ( ) A B A ( ) ( ) ( YourCar) ( changegear) ( lowergear) 4-1-3 (Class) (Blueprint) 4-3 changegear

More information

数 学 高 分 的 展 望 一 管 理 类 联 考 分 析 第 一 篇 大 纲 解 析 篇 编 写 : 孙 华 明 1 综 合 能 力 考 试 时 间 :014 年 1 月 4 日 上 午 8:30~11:30 分 值 分 配 : 数 学 :75 分 逻 辑 :60 分 作 文 :65 分 ; 总

数 学 高 分 的 展 望 一 管 理 类 联 考 分 析 第 一 篇 大 纲 解 析 篇 编 写 : 孙 华 明 1 综 合 能 力 考 试 时 间 :014 年 1 月 4 日 上 午 8:30~11:30 分 值 分 配 : 数 学 :75 分 逻 辑 :60 分 作 文 :65 分 ; 总 目 录 数 学 高 分 的 展 望... 1 第 一 篇 大 纲 解 析 篇... 1 一 管 理 类 联 考 分 析... 1 二 最 新 大 纲 解 析... 1 三 考 前 复 习 资 料 及 方 法... 第 二 篇 总 结 篇... 4 1 应 用 题 考 点 总 结 与 技 巧 归 纳... 4 代 数 模 块 题 型 归 纳 及 考 点 总 结... 9 3 数 列 模 块 题 型 归

More information

北京大学

北京大学 1 运算符重载 基本概念 郭炜刘家瑛 北京大学程序设计实习 运算符 C++ 预定义表示对数据的运算 +, -, *, /, %, ^, &, ~,!,, =, ,!= 只能用于基本的数据类型 整型, 实型, 字符型, 逻辑型 2 自定义数据类型与运算符重载 C++ 提供了数据抽象的手段 : 用户自己定义数据类型 -- 类 调用类的成员函数 操作它的对象 类的成员函数 操作对象时, 很不方便

More information

5. 閱 讀 下 文, 推 斷 內 最 適 合 填 入 的 詞 語 依 序 為 何? 人 也 真 是 一 個 絕 字, 一 邊 向 左, 一 邊 向 右, 一 副 的 樣 子, 偏 又 相 連 著, 各 說 各 話 各 走 各 路, 卻 又 人, 這 麼 一 個 簡 單 的 字, 竟 包 含 如 此

5. 閱 讀 下 文, 推 斷 內 最 適 合 填 入 的 詞 語 依 序 為 何? 人 也 真 是 一 個 絕 字, 一 邊 向 左, 一 邊 向 右, 一 副 的 樣 子, 偏 又 相 連 著, 各 說 各 話 各 走 各 路, 卻 又 人, 這 麼 一 個 簡 單 的 字, 竟 包 含 如 此 103 學 年 度 四 技 二 專 統 一 入 學 測 驗 國 文 試 題 一 選 擇 題 ( 一 ) 綜 合 測 驗 20 題 1. 下 列 各 組 內 的 字, 何 者 讀 音 不 同? (A) 諮 諏 善 道 / 渡 大 海, 入 荒 陬 (B) 傴 僂 提 攜 / 嘔 啞 嘲 哳 難 為 聽 (C) 跫 音 不 響 / 秋 蟬 兒 噪 罷 寒 蛩 兒 叫 (D) 形 容 枯 槁 / 阿 縞

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 内存操作 指针 常见考点 一级指针的用法和一级指针移动时的步长计算 两个指针之间的运算和地址越界问题 常量指针的相关问题 野指针导致程序执行错误的问题 多级指针的用法和多级指针移动时的步长计算 void * 和 void ** 的含义 3.1 指针基础 3.1.1 要点归纳 1. 指针变量 变量用于存放数据, 指针变量也是如此, 只不过指针变量存放的不是普通数据而是其他变量的地址 在 C

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

全国计算机技术与软件专业技术资格(水平)考试

全国计算机技术与软件专业技术资格(水平)考试 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 2008 年 上 半 年 程 序 员 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 ) 试 题 一 ( 共 15 分 ) 阅 读 以 下 说 明 和 流 程 图, 填 补 流 程 图 中 的 空 缺 (1)~(9), 将 解 答 填 入 答 题 纸 的 对 应 栏 内 [ 说 明

More information

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1 C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1 1 CARDGAME 1 CardGame 题目描述 桌上有一叠牌, 从第一张牌 ( 即位于顶面的牌 ) 开始从上往下依次编号为 1~n 当至少还剩两张牌时进行以下操作 : 把第一张牌扔掉, 然后把新的第一张放到整叠牌的最后 请模拟这个过程, 依次输出每次扔掉的牌以及最后剩下的牌的编号 输入 输入正整数 n(n

More information

网C试题(08上).doc

网C试题(08上).doc 学习中心 姓名 学号 西安电子科技大学网络与继续教育学院 高级语言程序设计 (C) 全真试题 ( 闭卷 90 分钟 ) 题号一二三总分 题分 60 20 20 得分 一 单项选择题 ( 每小题 3 分, 共 60 分 ) 1.C 语言程序的基本单位是 A) 程序行 B) 语句 C) 函数 D) 字符 2. 下列四组选项中, 均是不合法的用户标识符的选项是 A)A B)getc C)include D)while

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

Microsoft Word - 970617cppFinalSolution.doc

Microsoft Word - 970617cppFinalSolution.doc 國 立 台 灣 海 洋 大 學 資 訊 工 程 系 C++ 程 式 設 計 期 末 考 參 考 答 案 姓 名 : 系 級 : 學 號 : 97/06/17 考 試 時 間 :10:00 12:10 試 題 敘 述 蠻 多 的, 看 清 楚 題 目 問 什 麼, 針 對 重 點 回 答 是 很 重 要 的 ; 不 確 定 的 請 一 定 要 當 場 提 出 來, 不 要 白 花 力 氣 在 誤 會

More information

! "#$%& $()*+#$, $(-.&,./.+#/(-.&01( &-#&(&$# (&2*(,#-3.,14& $ +()5(*-#5(-#/-/#(-1#&-+)(& :;<<= > A B?

! #$%& $()*+#$, $(-.&,./.+#/(-.&01( &-#&(&$# (&2*(,#-3.,14& $ +()5(*-#5(-#/-/#(-1#&-+)(& :;<<= >  A B? ! "#$%& $()*+#$, $(-.&,./.+#/(-.&01( &-#&(&$# (&2*(,#-3.,14& $ +()5(*-#5(-#/-/#(-1#&-+)(&- 67789:;

More information

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

C++ 程序设计 OJ4 - 参考答案 MASTER 2017 年 5 月 21 日 1

C++ 程序设计 OJ4 - 参考答案 MASTER 2017 年 5 月 21 日 1 C++ 程序设计 OJ4 - 参考答案 MASTER 2017 年 5 月 21 日 1 1 SWAP 1 Swap 题目描述 用函数模板的方式实现对不同数据类型的数组中的数据进行输入 从小到大排序和输出 使用如下主函数测试你的模板设计一个函数模板 Swap, 实现任意数据类型的两个数据的交换, 分别用 int 型 double 型和 char 型的数据进行测试 main 函数如下 : int main()

More information

untitled

untitled 2016 133 1 7 28 19:00 29 14:00 http://zj.sceea.cn www.sceea.cn APP 1 2 2 6 6 2016 2016 7 28 3 2016 2016 2016 0363 1 17 1 1183 1 18 1 1184 2 41 1 45 1 1205 1 03 1 1210 3 25 1 29 2 1240 4 01 ( ) 4 1291 2

More information

C/C++ - 文件IO

C/C++ - 文件IO C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;

More information

Microsoft PowerPoint - CPP-Ch Print.ppt [兼容模式]

Microsoft PowerPoint - CPP-Ch Print.ppt [兼容模式] Chapter 13 Object-Oriented Programming: Polymorphism http://jssec.seu.edu.cn 杨明 yangming2002@seu.edu.cn OBJECTIVES What polymorphism( 多态 ) is, how it makes programming more convenient, and how it makes

More information

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

res/layout 目录下的 main.xml 源码 : <?xml version=1.0 encoding=utf 8?> <TabHost android:layout_height=fill_parent xml 拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,

More information

(6) 要 求 付 款 管 理 员 从 预 订 表 中 查 询 距 预 订 的 会 议 时 间 两 周 内 的 预 定, 根 据 客 户 记 录 给 满 足 条 件 的 客 户 发 送 支 付 余 款 要 求 (7) 支 付 余 款 管 理 员 收 到 客 户 余 款 支 付 的 通 知 后, 检

(6) 要 求 付 款 管 理 员 从 预 订 表 中 查 询 距 预 订 的 会 议 时 间 两 周 内 的 预 定, 根 据 客 户 记 录 给 满 足 条 件 的 客 户 发 送 支 付 余 款 要 求 (7) 支 付 余 款 管 理 员 收 到 客 户 余 款 支 付 的 通 知 后, 检 2016 年 上 半 年 软 件 设 计 师 考 试 真 题 ( 下 午 题 ) 下 午 试 题 试 题 一 ( 共 15 分 ) 阅 读 下 列 说 明 和 图, 回 答 问 题 1 至 问 题 4, 将 解 答 填 入 答 题 纸 的 对 应 栏 内 说 明 某 会 议 中 心 提 供 举 办 会 议 的 场 地 设 施 和 各 种 设 备, 供 公 司 与 各 类 组 织 机 构 租 用 场

More information

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074> 程 序 设 计 实 习 INFO130048 3-2.C++ 面 向 对 象 程 序 设 计 重 载 继 承 多 态 和 聚 合 复 旦 大 学 计 算 机 科 学 与 工 程 系 彭 鑫 pengxin@fudan.edu.cn 内 容 摘 要 方 法 重 载 类 的 继 承 对 象 引 用 和 拷 贝 构 造 函 数 虚 函 数 和 多 态 性 类 的 聚 集 复 旦 大 学 计 算 机 科 学

More information

主要内容 函数的定义 声明与调用 函数间的参数传递 函数嵌套与内联函数 形参带缺省值的函数与函数重载 数据的作用域 预编译处理与多文件结构 C++ 系统函数 2

主要内容 函数的定义 声明与调用 函数间的参数传递 函数嵌套与内联函数 形参带缺省值的函数与函数重载 数据的作用域 预编译处理与多文件结构 C++ 系统函数 2 第四讲 函数 主要内容 函数的定义 声明与调用 函数间的参数传递 函数嵌套与内联函数 形参带缺省值的函数与函数重载 数据的作用域 预编译处理与多文件结构 C++ 系统函数 2 函数的定义 函数是程序设计中, 对功能的抽象, 是 C++ 的基本模块 C++ 程序是由函数构成的 ( 一个或多个函数 ) C++ 程序必须有且只能有一个 main 函数 函数的定义 函数头 类型标识符函数名 ( 形式参数表

More information