9512.net
甜梦文库
当前位置:首页 >> 学科竞赛 >>

C++清华大学出版社



C++语言程序设计

第五章 C++程序的结构
东华理工大学信息工程学院

C++语言程序设计

ECIT CoIE

本章主要内容
? ? ? ? ? ? ? ? ?

作用域与可见性 对象的生存期 数据与函数 静态成员 共享数据的保护 友元 编译预处理命令

多文件结构和工程 深度探索

2

C++语言程序设计

ECIT CoIE

函数原形的作用域
作 用 域 与 可 见 性
函数原型中的参数,其作用域始于 "(",结束于")"。 ? 例如,设有下列原型声明:
?

double area(double radius);
radius 的作用域仅在于此, 不能用于程序正文其他地方, 因而可有可无。

3

C++语言程序设计

ECIT CoIE

局部作用域
作 用 域 与 可 见 性
?

函数的形参,在块中声明的标识符,其作 用域自声明处起,限于块中,例如: void fun(int a) { a的作用域 int b = a; cin >> b; if (b > 0) { int c; c的作用域
b的作用域

...... }

}
4

C++语言程序设计

ECIT CoIE

类作用域
作 用 域 与 可 见 性
? ?

类作用域作用于特定的成员名。 类X的成员m具有类作用域,对m的访问方式 如下:
–如果在X的成员函数中没有声明同名的局部作用 域标识符,那么在该函数内可以访问成员m。

–通过表达式x.m或者X::m访问。
–通过表达式ptr->M

5

C++语言程序设计

ECIT CoIE

命名空间
作 用 域 与 可 见 性
命名空间可以解决类名、函数名等的命名冲突 ? 命名空间的声明
?
namespace 命名空间名 { 各种声明(函数声明、类声明、??) }

?


namespace SomeNs { class SomeClass { ... }; }

?

特殊的命名空间
– 全局命名空间:默认的命名空间 – 匿名命名空间:对每个源文件是唯一的
6

C++语言程序设计

ECIT CoIE

命名空间作用域
作 用 域 与 可 见 性
? ?

一个命名空间确定了一个命名空间作用域 引用其它命名空间作用域中的标识符
– 命名空间名::标识符名 – 例:声明一个SomeClass型的对象
?

SomeNs::SomeClass obj1;

?

将其它命名空间作用域的标识符暴露于当前 作用域
– 对指定标识符
? ?

using 命名空间名::标识符名; using namespace命名空间名;

– 对所有标识符

7

C++语言程序设计

ECIT CoIE

可见性
作 用 域 与 可 见 性
可见性是从对标识符的引用的角度来谈 的概念 ? 可见性表示从内层作用域向外层作用域 “看”时能看见什么。 ? 如果标识在某处可见,则就可以在该处 引用此标识符。
?
命名空间作用域 类作用域

块作用域
8

C++语言程序设计

ECIT CoIE

可见性
作 用 域 与 可 见 性
?
?

标识符应声明在先,引用在后。
如果某个标识符在外层中声明,且在内层中 没有同一标识符的声明,则该标识符在内层 可见。 对于两个嵌套的作用域,如果在内层作用域 内声明了与外层作用域中同名的标识符,则 外层作用域的标识符在内层不可见。

?

9

C++语言程序设计

ECIT CoIE

同一作用域中的同名标识符
作 用 域 与 可 见 性
在同一作用域内的对象名、函数名、 枚举常量名会隐藏同名的类名或枚举 类型名。 ? 重载的函数可以有相同的函数名。
?

10

C++语言程序设计

ECIT CoIE

例 5.1
作 用 域 与 可 见 性
#include <iostream> using namespace std; int i; //在全局命名空间中的全局变量 namespace Ns { int j; //在Ns命名空间中的全局变量 } int main() { i = 5; //为全局变量i赋值 Ns::j = 6; //为全局变量j赋值 { //子块1 using namespace Ns; //当前块中可以直接引用Ns中的标识符 int i; //局部变量,局部作用域 i = 7; cout << "i = " << i << endl;//输出7 cout << "j = " << j << endl;//输出6 } cout << "i = " << i << endl; //输出5 return 0; }
11

C++语言程序设计

ECIT CoIE

对象的生存期
对象从产生到结束的这段时间就是

它的生存期。在对象生存期内,对象将
保持它的值,直到被更新为止。

12

C++语言程序设计

ECIT CoIE

静态生存期
对 象 的 生 存 期
这种生存期与程序的运行期相同。 ? 在文件作用域中声明的对象具有这种 生存期。 ? 在函数内部声明静态生存期对象,要 冠以关键字static 。
?

13

C++语言程序设计

ECIT CoIE


对 象 的 生 存 期
#include<iostream> using namespace std; int i = 5; //文件作用域 int main() { cout << "i=" << i << endl; return 0; }

i具有静态生存期
14

C++语言程序设计

ECIT CoIE

动态生存期
对 象 的 生 存 期
?

块作用域中声明的,没有用static修 是的对象是动态生存期的对象(习惯 称局部生存期对象)。

?

开始于程序执行到声明点时,结束于 命名该标识符的作用域结束处。
15

C++语言程序设计

ECIT CoIE


对 象 的 生 存 期
#include <iostream> using namespace std; void fun(); 运行结果: int main() { i=6, a=2 fun(); fun(); i=6, a=3 } void fun() { i是动态生存期 static int a=1; int i=5; a是静态生存期 a++; i++; cout<<"i="<<i<<",a="<<a<<endl; }

16

C++语言程序设计

ECIT CoIE

例5-2 变量的生存期与可见性

对 象 的 生 存 期

#include<iostream> using namespace std; int i = 1; // i 为全局变量,具有静态生存期。 void other() { static int a = 2; static int b; // a,b为静态局部变量,具有全局寿命,局部可见。 //只第一次进入函数时被初始化。 int c = 10; // C为局部变量,具有动态生存期, //每次进入函数时都初始化。 a += 2; i += 32; c += 5; cout<<"---OTHER---\n"; cout<<" i: "<<i<<" a: "<<a<<" b: "<<b<<" c: "<<c<<endl; b = a; }

17

int main() { static int a;// 静态局部变量,有全局寿命,局部可见。 int b = -10; // b, c为局部变量,具有动态生存期。 int c = 0; cout << "---MAIN---\n"; cout<<" i: "<<i<<" a: "<<a<<" b: "<<b<<" c: "<<c<<endl; c += 8; other(); cout<<"---MAIN---\n"; cout<<" i: "<<i<<" a: "<<a<<" b: "<<b<<" c: "<<c<<endl; i += 10; other(); return 0; }
17

运行结果: ---MAIN--i: 1 a: 0 b: -10 c: 0 ---OTHER--i: 33 a: 4 b: 0 c: 15 ---MAIN--i: 33 a: 0 b: -10 c: 8 ---OTHER--i: 75 a: 6 b: 4 c: 15
18

C++语言程序设计

ECIT CoIE

例5-3具有静态、动态生存期对象的时钟程序
对 象 的 生 存 期
#include<iostream> using namespace std; class Clock { //时钟类定义 public: //外部接口 Clock(); void setTime(int newH, int newM, int newS); //三个形参均具有函数原型作用域 void showTime(); private: //私有数据成员 int hour, minute, second; };
20

Clock::Clock() : hour(0), minute(0), second(0) { } //构造函数
void Clock::setTime(int newH, int newM, int newS) { //三个形参均具有局部作用域 hour = newH; minute = newM; second = newS; } void Clock::showTime() { cout << hour << ":" << minute << ":" << second << endl; }
20

Clock globClock;//声明对象globClock, //具有静态生存期,文件作用域 int main() { //主函数 cout << "First time output:" << endl; //引用具有文件作用域的对象: globClock.showTime();//对象的成员函数具有类作用域 globClock.setTime(8,30,30); Clock myClock(globClock); //声明具有块作用域的对象myClock cout<<"Second time output:"<<endl; myClock.showTime(); //引用具有块作用域的对象 return 0; }
21

程序的运行结果为: First time output: 0:0:0 Second time output: 8:30:30

22

C++语言程序设计

ECIT CoIE

数据与函数
数 据 与 函 数
?

数据存储在局部对象中,通过参数传 递实现共享——函数间的参数传递。

? ?

数据存储在全局对象中。 将数据和使用数据的函数封装在类中。

24

C++语言程序设计

ECIT CoIE

使用全局对象
数 据 与 函 数
#include<iostream> using namespace std; int global; void f() { global=5; } void g() { cout << global << endl; } int main() { f(); g(); //输出“5” return 0; }
25

C++语言程序设计

ECIT CoIE

将函数与数据封装
数 据 与 函 数
#include<iostream> using namespace std; class Application { public: void f(); void g(); private: int global; };
void Application::f() { global = 5;

void Application::g() { cout << global << endl; } int main() {
Application MyApp.f(); MyApp;

MyApp.g();
return 0; }
26

}

C++语言程序设计

ECIT CoIE

静态成员
?

静态数据成员
– 用关键字static声明 – 该类的所有对象维护该成员的同一个拷 贝 – 必须在类外定义和初始化,用(::)来指明 所属的类。

静 态 成 员

?

静态成员函数
– 类外代码可以使用类名和作用域操作符 来调用静态成员函数。 – 静态成员函数只能引用属于该类的静态 数据成员或静态成员函数。
27

C++语言程序设计

ECIT CoIE

例5-4 具有静态数据成员的 Point类

静 态 成 员

#include <iostream> using namespace std; class Point { public: Point(int x=0, int y=0) : x(x), y(y) { count++; } Point(Point &p); int getX() { return x; } int getY() { return y; } void showCount() { cout << " Object count=“ << count << endl; } private: int x,y; static int count; };
28

Point::Point(Point &p) { x = p.x; x = p.y; count++; }
int Point::count=0; int main() { Point a(4,5); cout<<"Point A:"<<a.getX()<<","<<a.getY(); a.showCount(); Point b(a); cout<<"Point B:"<<b.getX()<<","<<b.getY(); b.showCount(); return 0; }
28

C++语言程序设计

ECIT CoIE

静态成员函数举例
静 态 成 员
#include <iostream> using namespace std; class Application { public: static void f(); static void g(); private: static int global; }; int Application::global=0; void Application::f() { global=5; } void Application::g() { cout << global << endl; } int main() { Application::f(); Application::g(); return 0; }
30

C++语言程序设计

ECIT CoIE

静态成员函数举例
静 态 成 员
class A { public: static void f(A a); private: int x; }; void A::f(A a) { cout << x; //对x的引用是错误的 cout << a.x; //正确 }
31

C++语言程序设计

具有静态数据、函数成员的 Point类

ECIT CoIE

#include <iostream> using namespace std;

静 态 成 员

class Point { //Point类定义 public: //外部接口 Point(int x = 0, int y = 0) : x(x), y(y) { count++; } Point(Point &p); ~Point() { count--; } int getX() { return x; } int getY() { return y; } static void showCount() { //静态函数成员 cout << " Object count = " << count << endl; } private: //私有数据成员 int x, y; static int count; //静态数据成员声明 };
32

Point::Point(Point &p) { x = p.x; y = p.y; count++; } int Point::count=0; int main() { //主函数实现 Point a(4,5); //声明对象A cout<<"Point A,"<<a.getX()<<","<<a.getY(); Point::showCount(); //输出对象个数 Point b(a); //声明对象B cout<<"Point B,"<<b.GetX()<<","<<b.GetY(); Point:: showCount(); //输出对象个数 return 0; }
32

C++语言程序设计

ECIT CoIE

友元
友 元
友元是C++提供的一种破坏数据封装 和数据隐藏的机制。 ? 通过将一个模块声明为另一个模块的 友元,一个模块能够引用到另一个模 块中本是被隐藏的信息。 ? 可以使用友元函数和友元类。 ? 为了确保数据的完整性,及数据封装 与隐藏的原则,建议尽量不使用或少 使用友元。
?
34

C++语言程序设计

ECIT CoIE

友元函数
友 元
?

?

友元函数是在类声明中由关键字friend 修饰说明的非成员函数,在它的函数 体中能够通过对象名访问 private 和 protected成员
作用:增加灵活性,使程序员可以在 封装和快速性方面做合理选择。 访问对象中的成员必须通过对象名。
35

?

C++语言程序设计

ECIT CoIE

例5-6 使用友元函数计算两点距离 友 元
#include <iostream> #include <cmath> class Point { //Point类声明 public: //外部接口 Point(int x=0, int y=0) : x(x), y(y) { } int getX() { return x; } int getY() { return y; } friend float dist(Point &a, Point &b); private: //私有数据成员 int x, y; };
36

float dist( Point& a, Point& b) { double x = a.x - b.x; double y = a.y - b.y; return static_cast<float>(sqrt(x * x + y * y)); } int main() { Point p1(1, 1), p2(4, 5); cout <<"The distance is: "; cout << dist(p1, p2) << endl; return 0; }
36

C++语言程序设计

ECIT CoIE

友元类
友 元
? ?

若一个类为另一个类的友元,则此类 的所有成员都能访问对方类的私有成 员。

声明语法:将友元类名在另一个类中
使用friend修饰说明。
38

C++语言程序设计

ECIT CoIE

友元类举例
友 元
class A { friend class B; public: void display() { cout << x << endl; } private: int x; } class B { public: void set(int i); void display(); private: A a; };
39

void B::set(int i) { a.x=i; } void B::display() { a.display(); }

39

C++语言程序设计

ECIT CoIE

友元关系是单向的
如果声明B类是A类的友元,B类的 成员函数就可以访问A类的私有和保护 数据,但A类的成员函数却不能访问B 类的私有、保护数据。

41

C++语言程序设计

ECIT CoIE

常类型
共 享 数 据 的 保 护
常类型的对象必须进行初始化,而且不能被 更新。
? ?

常对象:必须进行初始化,不能被更新。
const 类名 对象名

常引用:被引用的对象不能被更新。
const 类型说明符 &引用名

?
?

常数组:数组元素不能被更新(下一章介绍)。
类型说明符 const 数组名[大小]...

常指针:指向常量的指针(下一章介绍)。
42

C++语言程序设计

ECIT CoIE

常对象举例
共 享 数 据 的 保 护
class A { public: A(int i,int j) {x=i; y=j;} ... private: int x,y; }; A const a(3,4); //a是常对象,不能被更新
43

C++语言程序设计

ECIT CoIE

用const修饰的对象成员
共 享 数 据 的 保 护
?

常成员函数
–使用const关键字说明的函数。 –常成员函数不更新对象的数据成员。 –常成员函数说明格式: 类型说明符 函数名(参数表)const; 这里,const是函数类型的一个组成部分,因此在实 现部分也要带const关键字。 –const关键字可以被用于参与对重载函数的区分

通过常对象只能调用它的常成员函数。 ? 常数据成员
?
–使用const说明的数据成员。
44

C++语言程序设计

ECIT CoIE

例5-7 常成员函数举例
共 享 数 据 的 保 护
#include<iostream> using namespace std; class R { public: R(int r1, int r2) : r1(r1), r2(r2) { } void print(); void print() const; private: int r1, r2; };
45

void R::print() { cout << r1 << ":" << r2 << endl; } void R::print() const { cout << r1 << ";" << r2 << endl; } int main() { R a(5,4); a.print(); //调用void print() const R b(20,52); b.print(); //调用void print() const return 0; }

45

C++语言程序设计

ECIT CoIE

例5-8 常数据成员举例
共 享 数 据 的 保 护
#include <iostream> using namespace std; class A { public: A(int i); void print(); private: const int a; static const int b; };

//静态常数据成员

47

const int A::b=10; A::A(int i) : a(i) { } void A::print() { cout << a << ":" << b <<endl; } int main() { /*建立对象a和b,并以100和0作为初值,分别调用构造 函数,通过构造函数的初始化列表给对象的常数据成 员赋初值*/ A a1(100), a2(0); a1.print(); a2.print(); return 0; }
47

C++语言程序设计

ECIT CoIE

例5-9常引用作形参
共 享 数 据 的 保 护
#include <iostream> #include <cmath> using namespace std; class Point { //Point类定义 public: //外部接口 Point(int x = 0, int y = 0) : x(x), y(y) { } int getX() { return x; } int getY() { return y; } friend float dist(const Point &p1, const Point &p2); private: //私有数据成员 int x, y; };
49

C++语言程序设计

ECIT CoIE

例5-9常引用作形参
共 享 数 据 的 保 护
float dist(const Point &p1, const Point &p2) { double x = p1.x - p2.x; double y = p1.y - p2.y; return static_cast<float>(sqrt(x * x + y * y)); } int main() { //主函数 const Point myp1(1, 1), myp2(4, 5); cout << "The distance is: "; cout << dist(myp1, myp2) << endl; return 0; }

50

C++语言程序设计

ECIT CoIE

编译预处理命令
?

#include 包含指令
–将一个源文件嵌入到当前源文件中该点处。 –#include<文件名>
?

按标准方式搜索,文件位于C++系统目录的include子目录下
首先在当前目录中搜索,若没有,再按标准方式搜索。

–#include"文件名"
?

?

#define 宏定义指令
–定义符号常量,很多情况下已被const定义语句取代。 –定义带参数宏,已被内联函数取代。

?

#undef
–删除由#define定义的宏,使之不再起作用。
51

C++语言程序设计

ECIT CoIE

条件编译指令
编 译 预 处 理 命 令

#if 和 #endif

#if 常量表达式 //当“ 常量表达式”非零时编译 程序正文 #endif ......

52

C++语言程序设计

ECIT CoIE

条件编译指令——#else
编 译 预 处 理 命 令
#if 常量表达式 //当“ 常量表达式”非零时编译 程序正文1 #else //当“ 常量表达式”为零时编译 程序正文2 #endif

53

C++语言程序设计

ECIT CoIE

条件编译指令
编 译 预 处 理 命 令
#if 常量表达式1
程序正文1

#elif

//当“ 常量表达式1”非零时编译

#elif 常量表达式2 程序正文2 #else //当“ 常量表达式2”非零时编译

程序正文3
#endif

//其他情况下编译

54

C++语言程序设计

ECIT CoIE

条件编译指令
编 译 预 处 理 命 令
#ifdef 标识符 程序段1 #else 程序段2 #endif 如果“标识符”经#defined定义过,且 未经undef删除,则编译程序段1,否则 编译程序段2。
55

C++语言程序设计

ECIT CoIE

条件编译指令
编 译 #ifndef 标识符 程序段1 预 处 #else 理 程序段2 命 #endif 令

如果“标识符”未被定义过,则编译程 序段1,否则编译程序段2。
56

C++语言程序设计

ECIT CoIE

多文件结构(例5-10)
?

一个源程序可以划分为多个源文件:
–类声明文件(.h文件)

–类实现文件(.cpp文件)
–类的使用文件(main()所在的.cpp文件)
?

利用工程来组合各个文件。

57

C++语言程序设计

ECIT CoIE

不使用条件编译的头文件
多 文 件 结 构
//main.cpp #include "file1.h" #include "file2.h" int main() { ? }
//file1.h #include "head.h" ?

//file2.h #include "head.h" ?
//head.h ? class Point { ? } ?
58

C++语言程序设计

ECIT CoIE

使用条件编译的头文件
多 文 件 结 构
//head.h #ifndef HEAD_H #define HEAD_H ? class Point { ? } ? #endif
59

C++语言程序设计

ECIT CoIE

常成员函数的声明原则
?

深 度 探 索

? ?

适当地将成员函数声明为常成员函数, 能够提高代码质量。 凡是不会改变对象状态的函数,都应当 声明为常成员函数。 什么是改变对象状态?
– 改变对象状态,不简单地等同于改变成员数 据的值。 – 只要一个成员函数执行与否,不会影响以后 接口函数的调用结果,都可以认为它不会改 变对象状态。

60

C++语言程序设计

ECIT CoIE

常成员函数的声明原则
深 度 探 索
class Line { //Line类的定义 public: //外部接口 Line(const Point &p1, const Point &p2) : p1(p1), p2(p2), len(-1) { } double getLen(); private: //私有数据成员 Point p1, p2; //Point类的对象p1,p2 double len; }; double Line::getLen() { if (len < 0) { double x = p1.getX() - p2.getX(); double y = p1.getY() - p2.getY(); len = sqrt(x * x + y * y); } return len; }

改变数据成 员,但不改 变对象状态

61

C++语言程序设计

ECIT CoIE

常成员函数的声明原则
深 度 探 索
在原则上,应当将getLen声明为常成 员函数,但由于修改了数据成员的值, 语言规则不允许 ? 怎么办?使用mutable关键字
?

– mutable关键字使得被修饰的成员对象无 视“常对象的成员对象被视为常对象” 这一语言原则
?

Mutable须慎用
62

C++语言程序设计

ECIT CoIE

修改后的程序代码
深 度 探 索
class Line { //Line类的定义 public: //外部接口 Line(const Point &p1, const Point &p2) : p1(p1), p2(p2), len(-1) { } double getLen() const; private: //私有数据成员 Point p1, p2; //Point类的对象p1,p2 mutable double len; }; double Line::getLen() const { if (len < 0) { double x = p1.getX() - p2.getX(); double y = p1.getY() - p2.getY(); len = sqrt(x * x + y * y); } return len; }
63

C++语言程序设计

ECIT CoIE

代码的编译
?

编译:源文件?目标文件
– 源文件的函数代码?目标文件的代码段 – 源文件的静态对象?目标文件的数据段
? 分为初始化的数据段和未初始化的数据段

深 度 探 索

– 符号表:将静态对象与函数的名字与地 址关联 – 重定位信息、其它信息

64

C++语言程序设计

ECIT CoIE

示例代码(1)
?

a.cpp

代码段(.text) (main的代码) lea 0x4(%esp),%ecx and $0xfffffff0,%esp …… 符号表 main _Z4funci y …… 未定义 未定义

深 度 探 索

extern int y; int func(int v); int main() { int z = 1; y = func(z); return 0; }

a.o

65

C++语言程序设计

ECIT CoIE

示例代码(2)
?

b.cpp

代码段(.text)
(func的代码) push %ebp mov %esp,%ebp …… 初始化的数据段(.data) (x的初值) 3 未初始化的数据段(.bss) (y) 符号表 _Z4funci x y ……

深 度 探 索

int x = 3; int y; int func(int v) { return v + x; }

b.o

66

C++语言程序设计

ECIT CoIE

代码的连接与执行
?

连接
– 将各段合并 – 将符号表综合 – 根据重定位信息,确定代码中用到的全局地 址

深 度 探 索

?

代码的执行
– 操作系统首先将文件从磁盘读入,初始化各 段——一些静态数据就在此时被初始化 – 从引导代码开始执行,引导代码启动main, main返回后,引导代码通知操作系统程序 结束
67

C++语言程序设计

ECIT CoIE

小结与复习建议
?

主要内容
– 作用域与可见性、对象的生存期、数据的共享 与保护、友元、编译预处理命令、多文件结构 和工程

?

达到的目标
– 深入理解程序的结构、模块间的关系、数据共 享。

?

实验任务
– 实验五
68



更多相关文章:
C++复习题 清华大学出版社
C++复习题 清华大学出版社_IT/计算机_专业资料。清华大学出版社 谭浩强一二章 A)# 1.下列 C++标点符号中表示行注释开始的是 C B); C)// D)} A 。。 。...
Visual C++面向对象程序设计教程与实验(第二版)清华大学出版社第3章习题参考答案
Visual C++面向对象程序设计教程与实验(第二版)清华大学出版社第3章习题参考答案_理学_高等教育_教育专区。Visual C++面向对象程序设计教程与实验(第二版)清华大学出...
C++复习题及答案__清华大学出版社
C++复习题及答案__清华大学出版社 隐藏>> 第一.二章 1.下列 C++标点符号中表示行注释开始的是 ( C )。 A)# B); C)// D)} 2.下列字符串中可以用作...
Visual C++面向对象程序设计教程与实验(第二版)清华大学出版社第6章习题参考答案
Visual C++面向对象程序设计教程与实验(第二版)清华大学出版社第6章习题参考答案_制度/规范_工作范文_实用文档。Visual C++面向对象程序设计教程与实验(第二版)清华...
VisualC++面向对象编程教程第2版(王育坚)清华大学出版社课后答案
VisualC++面向对象编程教程第2版(王育坚)清华大学出版社课后答案_理学_高等教育_教育专区。王育坚Vc++第二版课后答案2-45 编写一个程序,输入三角形的三条边的边长...
Visual_C++面向对象程序设计教程与实验(第二版)清华大学出版社1—8章答案
Visual_C++面向对象程序设计教程与实验(第二版)清华大学出版社1—8章答案_理学_高等教育_教育专区。第一章 1. 什么是面向对象程序设计?它与传统的结构化程序设计...
《C++面向对象程序设计》 答案-第一章--谭浩强-清华大学出版社
C++面相对象程序设计》谭浩强-清华大学出版社,第一章答案,有些题目有不同的解法提供参考,十分详细!《C++面相对象程序设计》谭浩强-清华大学出版社,第一章答案,有...
清华大学出版C++教程书上经典例题
游泳池改造预算,circle 类 #include<iostream> using namespace std; const float pi=(float)3.1415926; const float fenceprice=35.; const float concreteprice...
《C++面向对象程序设计答案》-第七章--谭浩强-清华大学出版社
C++面向对象程序设计答案》-第七章--谭浩强-清华大学出版社,有些题目提供了一种以上解法供参考~《C++面向对象程序设计答案》-第七章--谭浩强-清华大学出版社,有...
《C++面向对象程序设计答案》-第六章--谭浩强-清华大学出版社
C++面向对象程序设计答案》-第六章--谭浩强-清华大学出版社_IT/计算机_专业资料。《C++面向对象程序设计答案》-第六章--谭浩强-清华大学出版社,有些题目提供了...
更多相关标签:
c++程序设计    c++面向对象程序设计    c语言清华大学出版社    清华大学出版社    清华大学出版社网站    清华大学出版社官网    清华大学出版社oa    清华大学出版社待遇    

All rights reserved Powered by 甜梦文库 9512.net

copyright ©right 2010-2021。
甜梦文库内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图