北京大学
|
|
|
- 戌拥 劳
- 6 years ago
- Views:
Transcription
1 1 运算符重载 基本概念 郭炜刘家瑛 北京大学程序设计实习
2 运算符 C++ 预定义表示对数据的运算 +, -, *, /, %, ^, &, ~,!,, =, <<, >>,!= 只能用于基本的数据类型 整型, 实型, 字符型, 逻辑型 2
3 自定义数据类型与运算符重载 C++ 提供了数据抽象的手段 : 用户自己定义数据类型 -- 类 调用类的成员函数 操作它的对象 类的成员函数 操作对象时, 很不方便 在数学上, 两个复数可以直接进行 +/- 等运算 Vs. 在 C++ 中, 直接将 + 或 - 用于复数是不允许的 3
4 运算符重载 对抽象数据类型也能够直接使用 C++ 提供的运算符 程序更简洁 代码更容易理解 例如 : complex_a 和 complex_b 是两个复数对象 求两个复数的和, 希望能直接写 : complex_a + complex_b 4
5 运算符重载 运算符重载 对已有的运算符赋予多重的含义 使同一运算符作用于不同类型的数据时 不同类型的行为 目的 扩展 C++ 中提供的运算符的适用范围, 以用于类所表示的抽象数据类型 同一个运算符, 对不同类型的操作数, 所发生的行为不同 (5,10i) + (4,8i) = (9,18i) = 9 5
6 运算符重载 运算符重载的实质是函数重载 返回值类型 operator 运算符 ( 形参表 ) { 6
7 运算符重载 在程序编译时 : 把含运算符的表达式 对运算符函数的调用 把运算符的操作数 运算符函数的参数 运算符被多次重载时, 根据实参的类型决定调用哪个运算符函数 运算符可以被重载成普通函数 也可以被重载成类的成员函数 7
8 运算符重载为普通函数 class Complex { public: Complex( double r = 0.0, double i= 0.0 ){ real = r; imaginary = i; double real; // real part double imaginary; // imaginary part ; 8
9 Complex operator+ (const Complex & a, const Complex & b) { return Complex( a.real+b.real, a.imaginary+b.imaginary); // 类名 ( 参数表 ) 就代表一个对象 Complex a(1,2), b(2,3), c; c = a + b; // 相当于什么? 重载为普通函数时, 参数个数为运算符目数 9
10 运算符重载为成员函数 class Complex { public: Complex( double r= 0.0, double m = 0.0 ): real(r), imaginary(m) { // constructor Complex operator+ ( const Complex & ); // addition Complex operator- ( const Complex & ); // subtraction private: double real; // real part double imaginary; // imaginary part ; 重载为成员函数时, 参数个数为运算符目数减一 10
11 // Overloaded addition operator Complex Complex::operator+(const Complex & operand2) { return Complex( real + operand2.real, imaginary + operand2.imaginary ); // Overloaded subtraction operator Complex Complex::operator- (const Complex & operand2){ return Complex( real - operand2.real, imaginary - operand2.imaginary ); int main(){ Complex x, y(4.3, 8.2), z(3.3, 1.1); x = y + z; x = y - z; return 0; // 相当于什么? // 相当于什么? 11
12 1 赋值运算符的重载 郭炜刘家瑛 北京大学 程序设计实习
13 赋值运算符 = 重载 赋值运算符两边的类型可以不匹配 把一个 int 类型变量赋值给一个 Complex 对象 把一个 char * 类型的字符串赋值给一个字符串对象 需要重载赋值运算符 = 赋值运算符 = 只能重载为成员函数 2
14 编写一个长度可变的字符串类 String 包含一个 char * 类型的成员变量 指向动态分配的存储空间 该存储空间用于存放 \0 结尾的字符串 class String { private: char * str; public: String () : str(null) { // 构造函数, 初始化 str 为 NULL const char * c_str() { return str; char * operator = (const char * s); ~String( ); ; 3
15 // 重载 = obj = hello 能够成立 char * String::operator = (const char * s){ if(str) delete [] str; if(s) { //s 不为 NULL 才会执行拷贝 str = new char[strlen(s)+1]; strcpy(str, s); else str = NULL; return str; 4
16 String::~String( ) { ; if(str) delete [] str; int main(){ String s; s = Good Luck, ; cout << s.c_str() << endl; // String s2 = hello! ; // 这条语句要是不注释掉就会出错 s = "Shenzhou 8!"; cout << s.c_str() << endl; return 0; 程序输出结果 : Good Luck, Shenzhou 8!
17 重载赋值运算符的意义 浅复制和深复制 S1 = S2; 浅复制 / 浅拷贝 执行逐个字节的复制工作 MyString S1, S2; S1 = this ; S2 = that ; S1 = S2; 6
18 s1 str s2 str t h i s \0 t h a t \0 String S1, S2; S1 = this ; S2 = that ; s1 str s2 str t h i s \0 t h a t \0 S1 = S2; 7
19 重载赋值运算符的意义 浅复制和深复制 深复制 / 深拷贝 将一个对象中指针变量指向的内容, 复制到另一个对象中指针成员对象指向的地方 MyString S1, S2; S1 = this ; S2 = that ; S1 = S2; 8
20 s1 str s2 str t h i s \0 t h a t \0 String S1, S2; S1 = this ; S2 = that ; s1 str s2 str t h a t \0 t h a t \0 S1 = S2; 9
21 MyString S1, S2; S1 = this ; S2 = that ; S1 = S2; 在 class MyString 里添加成员函数 : String & operator = (const String & s) { if(str) delete [] str; str = new char[strlen(s.str)+1]; strcpy(str, s.str); return * this; 10
22 思考 考虑下面语句 : MyString s; s = Hello ; s = s; 是否会有问题? 11
23 思考 正确写法 : String & String::operator = (const String & s){ if(str == s.str) return * this; if(str) delete [] str; if(s.str) { //s.str 不为 NULL 才会执行拷贝 str = new char[strlen(s.str)+1]; strcpy( str,s.str); else str = NULL; return * this; 12
24 对 operator = 返回值类型的讨论 void 好不好? 考虑 : a = b = c; // 等价于 a.operator=(b.operator=(c)); String 好不好? 为什么是 String & 运算符重载时, 好的风格 -- 尽量保留运算符原本的特性考虑 : (a=b)=c; // 会修改 a 的值分别等价于 : (a.operator=(b)).operator=(c); 13
25 上面的 String 类是否就没有问题了? 为 String 类编写复制构造函数时会面临和 = 同样的问题, 用同样的方法处理 String::String(String & s) { if(s.str) { str = new char[strlen(s.str)+1]; strcpy(str, s.str); else str = NULL; 14
26 1 运算符重载为友元函数 郭炜刘家瑛 北京大学程序设计实习
27 运算符重载为友元 通常, 将运算符重载为类的成员函数重载为友元函数的情况 : 成员函数不能满足使用要求 普通函数, 又不能访问类的私有成员 2
28 运算符重载为友元 class Complex{ double real, imag; public: Complex(double r, double i):real(r), imag(i){ ; Complex operator+(double r); ; Complex Complex::operator+(double r){ // 能解释 c+5 return Complex(real + r, imag); 3
29 经过上述重载后 : Complex c ; c = c + 5; // 有定义, 相当于 c = c.operator +(5); 但是 : c = 5 + c; // 编译出错 为了使得上述表达式能成立, 需要将 + 重载为普通函数 Complex operator+ (double r, const Complex & c) { // 能解释 5+c return Complex( c.real + r, c.imag); 4
30 普通函数不能访问私有成员 将运算符 + 重载为友元函数 class Complex { double real, imag; public: Complex( double r, double i):real(r),imag(i){ ; Complex operator+( double r ); friend Complex operator + (double r, const Complex & c); ; 5
31 信息科学技术学院 程序设计实习 郭炜微博 刘家瑛微博 1
32 信息科学技术学院 程序设计实习 郭炜刘家瑛 运算符重载实例 : 可变长整型数组 ( 教材 P215) 2
33 int main() { // 要编写可变长整型数组类, 使之能如下使用 : CArray a; // 开始里的数组是空的 for( int i = 0;i < 5;++i) a.push_back(i); CArray a2,a3; a2 = a; 要重载 = for( int i = 0; i < a.length(); ++i ) cout << a2[i] << " " ; 要重载 [ ] a2 = a3; //a2 是空的 for( int i = 0; i < a2.length(); ++i ) //a2.length() 返回 0 cout << a2[i] << " "; cout << endl; a[3] = 100; CArray a4(a); for( int i = 0; i < a4.length(); ++i ) cout << a4[i] << " "; return 0; 要用动态分配的内存来存放数组元素, 需要一个指针成员变量 要自己写复制构造函数 程序输出结果是 : 要做哪些事情? 3
34 class CArray { int size; // 数组元素的个数 int *ptr; // 指向动态分配的数组 public: CArray(int s = 0); //s 代表数组元素的个数 CArray(CArray & a); ~CArray(); void push_back(int v); // 用于在数组尾部添加一个元素 v CArray & operator=( const CArray & a); // 用于数组对象间的赋值 int length() { return size; // 返回数组元素个数 CArray::operator[](int i) // 返回值是什么类型? {// 用以支持根据下标访问数组元素, // 如 n = a[i] 和 a[i] = 4; 这样的语句 return ptr[i]; ; 4
35 class CArray { int size; // 数组元素的个数 int *ptr; // 指向动态分配的数组 public: CArray(int s = 0); //s 代表数组元素的个数 CArray(CArray & a); ~CArray(); void push_back(int v); // 用于在数组尾部添加一个元素 v CArray & operator=( const CArray & a); // 用于数组对象间的赋值 int length() { return size; // 返回数组元素个数 int & CArray::operator[](int i) // 返回值为 int 不行! 不支持 a[i] = 4 {// 用以支持根据下标访问数组元素, // 如 n = a[i] 和 a[i] = 4; 这样的语句 return ptr[i]; ; 5
36 CArray::CArray(int s):size(s) { if( s == 0) ptr = NULL; else ptr = new int[s]; CArray::CArray(CArray & a) { if(!a.ptr) { ptr = NULL; size = 0; return; ptr = new int[a.size]; memcpy( ptr, a.ptr, sizeof(int ) * a.size); size = a.size; 6
37 a1 ptr CArray a2(a1); a2 ptr a1 ptr a2 ptr a ptr
38 CArray::~CArray() { if( ptr) delete [] ptr; CArray & CArray::operator=( const CArray & a) { // 赋值号的作用是使 = 左边对象里存放的数组, 大小和内容都和右边的对象一样 if( ptr == a.ptr) // 防止 a=a 这样的赋值导致出错 return * this; if( a.ptr == NULL) { // 如果 a 里面的数组是空的 if( ptr ) delete [] ptr; ptr = NULL; size = 0; return * this; 8
39 if( size < a.size) { // 如果原有空间够大, 就不用分配新的空间 if(ptr) delete [] ptr; ptr = new int[a.size]; memcpy( ptr,a.ptr,sizeof(int)*a.size); size = a.size; return * this; // CArray & CArray::operator=( const CArray & a) 9
40 void CArray::push_back(int v) { // 在数组尾部添加一个元素 if( ptr) { int * tmpptr = new int[size+1]; // 重新分配空间 memcpy(tmpptr,ptr,sizeof(int)*size); // 拷贝原数组内容 delete [] ptr; ptr = tmpptr; else // 数组本来是空的 ptr = new int[1]; ptr[size++] = v; // 加入新的数组元素 10
41 信息科学技术学院 程序设计实习 郭炜微博 刘家瑛微博
42 信息科学技术学院 程序设计实习 郭炜刘家瑛 流插入运算符和流提取运算符的重载 ( 教材 P218)
43 问题 cout << 5 << this ; 为什么能够成立? cout 是什么? << 为什么能用在 cout 上?
44 流插入运算符的重载 cout 是在 iostream 中定义的,ostream 类的对象 << 能用在 cout 上是因为, 在 iostream 里对 << 进行了重载 考虑, 怎么重载才能使得 cout << 5; 和 cout << this 都能成立?
45 流插入运算符的重载 有可能按以下方式重载成 ostream 类的成员函数 : void ostream::operator<<(int n) { // 输出 n 的代码 return;
46 流插入运算符的重载 cout << 5 ; 即 cout.operator<<(5); cout << this ; 即 cout.operator<<( this ); 怎么重载才能使得 cout << 5 << this ; 成立?
47 流插入运算符的重载 ostream & ostream::operator<<(int n) { // 输出 n 的代码 return * this; ostream & ostream::operator<<( const char * s ) { // 输出 s 的代码 return * this;
48 流插入运算符的重载 cout << 5 << this ; 本质上的函数调用的形式是什么? cout.operator<<(5).operator<<( this );
49 流插入运算符的重载 假定下面程序输出为 5hello, 该补写些什么 class CStudent{ public: int nage; ; int main(){ CStudent s ; s.nage = 5; cout << s <<"hello"; return 0;
50 流插入运算符的重载 ostream & operator<<( ostream & o,const CStudent & s){ o << s.nage ; return o;
51 例题 ( 教材 P218) 假定 c 是 Complex 复数类的对象, 现在希望写 cout << c;, 就能以 a+bi 的形式输出 c 的值, 写 cin>>c;, 就能从键盘接受 a+bi 形式的输入, 并且使得 c.real = a,c.imag = b
52 例题 int main() { Complex c; int n; cin >> c >> n; cout << c << "," << n; return 0; 程序运行结果可以如下 : i i, 87
53 #include <iostream> #include <string> #include <cstdlib> using namespace std; class Complex { double real,imag; public: Complex( double r=0, double i=0):real(r),imag(i){ ; friend ostream & operator<<( ostream & os, const Complex & c); friend istream & operator>>( istream & is,complex & c); ; ostream & operator<<( ostream & os,const Complex & c) { os << c.real << "+" << c.imag << "i"; // 以 "a+bi" 的形式输出 return os;
54 istream & operator>>( istream & is,complex & c) { string s; is >> s; // 将 "a+bi" 作为字符串读入, a+bi 中间不能有空格 int pos = s.find("+",0); string stmp = s.substr(0,pos); // 分离出代表实部的字符串 c.real = atof(stmp.c_str());//atof 库函数能将 const char* 指针指向的内容转换成 float stmp = s.substr(pos+1, s.length()-pos-2); // 分离出代表虚部的字符串 c.imag = atof(stmp.c_str()); return is;
55 int main() { Complex c; int n; cin >> c >> n; cout << c << "," << n; return 0; 程序运行结果可以如下 : i i, 87
56 1 自加 / 自减运算符的重载 郭炜刘家瑛 北京大学 程序设计实习
57 自加 / 自减运算符的重载 自加 ++/ 自减 -- 运算符有前置 / 后置之分前置运算符作为一元运算符重载 重载为成员函数 : T & operator++(); T & operator--(); 重载为全局函数 : T & operator++(t &); T & operator (T &); ++obj, obj.operator++(), operator++(obj) 都调用上述函数 2
58 自加 / 自减运算符的重载 后置运算符作为二元运算符重载 多写一个参数, 具体无意义 重载为成员函数 : T operator++(int); T operator--(int); 重载为全局函数 : T operator++(t &, int); T operator--(t &, int); obj++, obj.operator++(0), operator++(obj,0) 都调用上函数 3
59 int main(){ CDemo d(5); cout << (d++) << ","; // 等价于 d.operator++(0); cout << d << ","; cout << (++d) << ","; // 等价于 d.operator++(); cout << d << endl; cout << (d--) << ","; // 等价于 operator--(d,0); cout << d << ","; cout << (--d) << ","; // 等价于 operator--(d); cout << d << endl; return 0; 程序输出结果 : 5,6,7,7 7,6,5,5 如何编写 CDemo? 4
60 class CDemo { private : int n; public: CDemo(int i=0):n(i) { CDemo & operator++(); // 用于前置 ++ 形式 CDemo operator++(int); // 用于后置 ++ 形式 operator int ( ) { return n; friend CDemo & operator--(cdemo &); // 用于前置 -- 形式 friend CDemo operator--(cdemo &, int); // 用于后置 -- 形式 ; CDemo & CDemo::operator++() { // 前置 ++ n++; return * this; 5
61 CDemo CDemo::operator++(int k) { // 后置 ++ CDemo tmp(*this); // 记录修改前的对象 n++; return tmp; // 返回修改前的对象 CDemo & operator--(cdemo & d) { // 前置 -- d.n--; return d; CDemo operator--(cdemo & d, int) { // 后置 -- CDemo tmp(d); d.n --; return tmp; 6
62 operator int ( ) { return n; int 作为一个类型强制转换运算符被重载, Demo s; (int) s ; // 等效于 s.int(); 类型强制转换运算符重载时, 不能写返回值类型 实际上其返回值类型 -- 类型强制转换运算符代表的类型 7
63 运算符重载的注意事项 C++ 不允许定义新的运算符 重载后运算符的含义应该符合日常习惯 complex_a + complex_b word_a > word_b date_b = date_a + n 运算符重载不改变运算符的优先级 以下运算符不能被重载 :.,.*, ::,?:, sizeof 重载运算符 (), [ ], -> 或者赋值运算符 = 时, 重载函数必须声明为类的成员函数 8
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;
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. 注意 "," 后面有一个空格,"." 结束,
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.
北京大学
1 string 类 郭炜刘家瑛 北京大学程序设计实习 string 类 string 类是一个模板类, 它的定义如下 : typedef basic_string string; 使用 string 类要包含头文件 string 对象的初始化 : string s1("hello"); // 一个参数的构造函数 string s2(8, x ); // 两个参数的构造函数
IO
1 C/C++ C FILE* fscanf fgets fread fprintf fputs fwrite C++ ifstream ofstream >>
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 ;
新版 明解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,
幻灯片 1
信息科学技术学院 程序设计实习 郭炜微博 http://weibo.com/guoweiofpku http://blog.sina.com.cn/u/3266490431 刘家瑛微博 http://weibo.com/pkuliujiaying 1 信息科学技术学院 程序设计实习 郭炜刘家瑛 继承和派生 ( 教材 P215) 2 继承和派生的概念 继承 : 在定义一个新的类 B 时, 如果该类与某个已有的类
C++ 程序设计 实验 2 - 参考答案 MASTER 2017 年 5 月 21 日 1
C++ 程序设计 实验 2 - 参考答案 MASTER 2017 年 5 月 21 日 1 1 CRECT 类 1 CRect 类 设计矩形类, 包含 长度和宽度信息 基本构造函数 基础属性的访问接口 ( 读 / 写, Read/Write, Get/Set) 计算周长和面积 ( 注 : 基本构造函数, 一个无参数的默认构造函数, 以及一个初始化数据成员的构造函数如果数据成员的初始化有多种形式, 就提供多个构造函数
C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1
C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 CIRCLE 1 Circle 描述 编写一个圆类 Circle, 实现半径的输入 面积的计算和输出 输入 圆的半径 (double 类型 ) 输出 圆的面积 ( 保留小数点后两位 ) 样例输入 3 样例输出 28.27 提示 圆周率的取值需要比较精确, 以保证计算结果的精度 #include
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
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,
Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]
指针 Pointers 变量指针与指针变量 Pointer of a variable 变量与内存 (Variables and Memory) 当你声明一个变量时, 计算机将给该变量一个内存, 可以存储变量的值 当你使用变量时, 计算机将做两步操作 : - 根据变量名查找其对应的地址 ; - 通过地址对该地址的变量内容进行读 (retrieve) 或写 (set) 变量的地址称为变量的指针! C++
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];
《计算概论》课程 第十九讲 C 程序设计语言应用
计算概论 A 程序设计部分 字符数组与字符串 李戈 北京大学信息科学技术学院软件研究所 [email protected] 字符数组的定义 #include int main() char a[10] = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ; for (int i = 0; i < 10; i++) cout
エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******
******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);
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
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 =
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: [email protected] 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP
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 标识符逗号分隔,
Microsoft PowerPoint - 第06讲_继承.ppt [兼容模式]
程序设计实习 (I): C++ 程序设计 第六讲继承 上节内容回顾 三种运算符重载的实现方式 重载为普通函数 重载为成员函数 重载为友元 常见的运算符重载 流运算符 (>>
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.
FY.DOC
高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 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
Microsoft PowerPoint - 04-Inheritance.ppt
继承 派生与多态性 1 本章主要内容 类的继承与派生 类成员的访问控制 简单继承与多重继承 派生类的构造 析构函数 多态性 2 1 类的继承与派生 保持已有类的特性, 并在其基础上产生新的类, 称新类继承了已有类的特征, 或称已有类派生出新类 被继承的已有类称为基类 ( 或父类 ) 派生出的新类称为派生类 派生类将自动继承基类的所有特性 ( 属性和方法 ) 派生类可以定义新的特性 ( 属性和方法 )
Microsoft PowerPoint - 07 派生数据类型
能源与动力工程学院 目录 派生类型 陈 斌 固有数据类型 数值型 (numerical) 整型 INTEGER 实型 REAL 复数型 COMPLEX 非数值型 字符型 CHARACTER 逻辑型 ( 布尔型 )LOGICAL 自定义数据类型 ( 派生类型, derived type) 派生类型是指用户利用 Fortran 系统内部类型, 如整型 实型 复数型 逻辑型 字符型等的组合自行创建出一个新的数据类型,
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
上海交通大学
一 读程序, 写结果 ( 每题 4 分, 共 40 分 ) 1. 写出下列程序运行结果 class test friend test operator+(const test &p1, const test &p2) return test(p1.data1 + p2.data1, p1.data2 + p2.data2); friend ostream &operator
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 数据 ; 要求每个类均有构造函数 析构函数和显示数据的函数
C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1
C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1 1 CARDGAME 1 CardGame 题目描述 桌上有一叠牌, 从第一张牌 ( 即位于顶面的牌 ) 开始从上往下依次编号为 1~n 当至少还剩两张牌时进行以下操作 : 把第一张牌扔掉, 然后把新的第一张放到整叠牌的最后 请模拟这个过程, 依次输出每次扔掉的牌以及最后剩下的牌的编号 输入 输入正整数 n(n
第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
《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 =
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.
《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;,
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)
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()
提问袁小兵:
C++ 面 试 试 题 汇 总 柯 贤 富 管 理 软 件 需 求 分 析 篇 1. STL 类 模 板 标 准 库 中 容 器 和 算 法 这 部 分 一 般 称 为 标 准 模 板 库 2. 为 什 么 定 义 虚 的 析 构 函 数? 避 免 内 存 问 题, 当 你 可 能 通 过 基 类 指 针 删 除 派 生 类 对 象 时 必 须 保 证 基 类 析 构 函 数 为 虚 函 数 3.
新・解きながら学ぶJava
481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --
网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
OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢
OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: [email protected] 复习 : Java 类型 基本类型 boolean, char, 封装 (wrappers) 类 (class) 定义 class MyType { int i;
无类继承.key
无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo [email protected] 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
C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 3 日 1
C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 MYQUEUE 1 MyQueue 题目描述 设计一个 MyQueue 类模板, 类模板说明如下 : template class MyQueue; template std::ostream & operator
C++ 程序设计 OJ10 - 参考答案 MASTER 2019 年 6 月 17 日 1
C++ 程序设计 OJ10 - 参考答案 MASTER 2019 年 6 月 17 日 1 1 STRINGREVERSE 1 StringReverse 题目描述 利用 string 类对字符串进行 ( 按反转后字典序 ) 排序并输出, 例如两个字符串为 aab, cba, 则 cba 应该排在 aab 之前, 因为 cba 反转后为 abc, aab 反转后为 baa. 输入 第一行为一个整数
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
程序设计语言及基础
Chapter 10 Classes: A Deeper Look, Part 2 http://jssec.seu.edu.cn 杨明 [email protected] OBJECTIVES To specify const (constant) objects and const member functions. To create objects composed of other
Guava学习之Resources
Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于
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" 一些
Strings
Polymorphism and Virtual Functions Cheng-Chin Chiang Virtual Function Basics 多 型 (Polymorphism) 賦 予 一 個 函 數 多 種 意 涵, 存 在 於 同 一 類 別 之 內 祖 先 類 別 與 後 代 類 別 間 物 件 導 向 程 式 設 計 基 本 原 理 虛 擬 函 數 (Virtual Function)
Microsoft PowerPoint - 1. C++介绍.ppt [兼容模式]
C++ 入门 http://hwdong.com 1. 程序 = 数据 + 运算 Application = Data + Operator 程序就是对数据进行加工处理 ( 运算 ) 程序 = 数据 + 运算 数据用变量 ( 常量 ) 表示, 用运算符对它们进行运算 程序 = 变量 + 运算符 程序中的数据应有条理地存储在内存中, 处理需要按照一定步骤或方法进行 程序 = 数据结构 + 算法 机器语言
C/C++语言 - 运算符、表达式和语句
C/C++ Table of contents 1. 2. 3. 4. C C++ 5. 6. 7. 1 i // shoe1.c: # include # define ADJUST 7. 64 # define SCALE 0. 325 int main ( void ) { double shoe, foot ; shoe = 9. 0; foot = SCALE * shoe
Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc
2 5 8 11 0 1. 13 2. 15 3. 18 1 1. 22 2. 25 3. 27 2 1. 35 2. 38 3. 41 4. 43 5. 48 6. 50 3 1. 56 2. 59 3. 63 4. 65 5. 69 13 22 35 56 6. 74 7. 82 8. 84 9. 87 10. 97 11. 102 12. 107 13. 111 4 114 1. 114 2.
CHAPTER VC#
1. 2. 3. 4. CHAPTER 2-1 2-2 2-3 2-4 VC# 2-5 2-6 2-7 2-8 Visual C# 2008 2-1 Visual C# 0~100 (-32768~+32767) 2 4 VC# (Overflow) 2-1 2-2 2-1 2-1.1 2-1 1 10 10!(1 10) 2-3 Visual C# 2008 10! 32767 short( )
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
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 ;
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 //
幻灯片 1
信息科学技术学院 程序设计实习 郭炜微博 http://weibo.com/guoweiofpku http://blog.sina.com.cn/u/3266490431 刘家瑛微博 http://weibo.com/pkuliujiaying 1 信息科学技术学院 程序设计实习 郭炜刘家瑛 函数指针 ( 教材 P107) 2 基本概念 程序运行期间, 每个函数都会占用一段连续的内存空间 而函数名就是该函数所占内存区域的起始地址
<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>
程 序 设 计 实 习 INFO130048 3-2.C++ 面 向 对 象 程 序 设 计 重 载 继 承 多 态 和 聚 合 复 旦 大 学 计 算 机 科 学 与 工 程 系 彭 鑫 [email protected] 内 容 摘 要 方 法 重 载 类 的 继 承 对 象 引 用 和 拷 贝 构 造 函 数 虚 函 数 和 多 态 性 类 的 聚 集 复 旦 大 学 计 算 机 科 学
C 1
C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=
新・解きながら学ぶC言語
330!... 67!=... 42 "... 215 " "... 6, 77, 222 #define... 114, 194 #include... 145 %... 21 %... 21 %%... 21 %f... 26 %ld... 162 %lf... 26 %lu... 162 %o... 180 %p... 248 %s... 223, 224 %u... 162 %x... 180
C++ 程式設計
C C 料, 數, - 列 串 理 列 main 數串列 什 pointer) 數, 數, 數 數 省 不 不, 數 (1) 數, 不 數 * 料 * 數 int *int_ptr; char *ch_ptr; float *float_ptr; double *double_ptr; 數 (2) int i=3; int *ptr; ptr=&i; 1000 1012 ptr 數, 數 1004
新版 明解C言語入門編
328, 4, 110, 189, 103, 11... 318. 274 6 ; 10 ; 5? 48 & & 228! 61!= 42 ^= 66 _ 82 /= 66 /* 3 / 19 ~ 164 OR 53 OR 164 = 66 ( ) 115 ( ) 31 ^ OR 164 [] 89, 241 [] 324 + + 4, 19, 241 + + 22 ++ 67 ++ 73 += 66
C C
C C 2017 3 8 1. 2. 3. 4. char 5. 2/101 C 1. 3/101 C C = 5 (F 32). 9 F C 4/101 C 1 // fal2cel.c: Convert Fah temperature to Cel temperature 2 #include 3 int main(void) 4 { 5 float fah, cel; 6 printf("please
全国计算机技术与软件专业技术资格(水平)考试
全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 2008 年 上 半 年 程 序 员 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 ) 试 题 一 ( 共 15 分 ) 阅 读 以 下 说 明 和 流 程 图, 填 补 流 程 图 中 的 空 缺 (1)~(9), 将 解 答 填 入 答 题 纸 的 对 应 栏 内 [ 说 明
新・明解C言語入門編『索引』
!... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177
