C+语言程序设计 第5讲:C++程序的结构
C++语言程序设计 第5讲: C++程序的结构
构造函数 相当于;c1ock:c1ok(0)(houx= minute= second=0; 默认参数构造函数 hour 拷贝构造函数 Clock(int NewH, Clock(Clock& c)i private int hour int minute int second Clock:: Clock(int NewH, int NewM, int NewS) hour Newh: minute NewM; second News i Clock:: Clock(Clock& c) hour =c hour; minute c. minute second c second
构造函数 class Clock { public: Clock() : hour(0), minute(0), second(0) {} Clock(int NewH, int NewM=0, int NewS=0); Clock(Clock& c); private: int hour; int minute; int second; }; Clock::Clock(int NewH, int NewM, int NewS) { hour = NewH; minute = NewM; second = NewS; } Clock::Clock(Clock& c) { hour = c.hour; minute = c.minute; second = c.second; } 相当于:Clock::Clock() { hour = minute = second = 0; } 拷贝构造函数 默认参数构造函数
析构函数 class Clock public: Clocks void Setrime (int, intint)i void ShowTime()i 对象被删除的时刻自动调用 cock()严77 private int hour; int minut main() char* pbuf i Clock c;//构造 Clock:: Clock(i pbuf c. Setime(9,30,30); Clock: cLock o delete }//析构
析构函数 class Clock { public: Clock(); void SetTime (int, int, int); void ShowTime(); ~Clock(); // 析构函数 private: int hour; int minute; int second; char* pbuf; }; Clock::Clock() { pbuf = new char[128]; } Clock::~Clock() { delete[] pbuf; } 对象被删除的时刻自动调用 main() { Clock c; // 构造 c.SetTime(9,30,30); } // 析构
构造函数可使每个对象都有正确的初始 值 燥析构函数可使每个对象在结束时自动进 清理工作 析构函数的使用 个类只能有一个析构函数,不允许重载! 最先析构的是自动变量; 静态对象的生命期一直到程序结束;( static) 全局对象是最后被析构的
构造函数可使每个对象都有正确的初始 值 析构函数可使每个对象在结束时自动进 行清理工作 析构函数的使用 一个类只能有一个析构函数,不允许重载! 最先析构的是自动变量; 静态对象的生命期一直到程序结束;(static) 全局对象是最后被析构的
访问函数和工具函数 将类的函数分为两大类,访问函数和工具函数。 ●访问函数是供客户调用的,一般为 public 工具函数是为实现访问函数的某些功能而需要的 函数,一般为 private。 秦数据成员和成员函数的使用 数据一般设为私有成员,便于保护 需要用户设置的私有数据成员用get和set提供给 用户; ●要保证私有数据成员在任何时候都是有效的
访问函数和工具函数 将类的函数分为两大类,访问函数和工具函数。 访问函数是供客户调用的,一般为public。 工具函数是为实现访问函数的某些功能而需要的 函数,一般为private。 数据成员和成员函数的使用 数据一般设为私有成员,便于保护; 需要用户设置的私有数据成员用get和set提供给 用户; 要保证私有数据成员在任何时候都是有效的
接口与实现的分离 软件工程的一个最基本的原则:接口与实现 分离 .h文件与.cpp文件分离 类的定义与类的实现分离 但是Java中类的定义与实现是在一起的, Why? 秦因为Java中有一个专门管接口的类叫 Interface。这 个类是公开的,而其他类则酸屏蔽起多 这种方式称为对象的“包装”或称“封
接口与实现的分离 软件工程的一个最基本的原则:接口与实现 分离 .h文件与.cpp文件分离 类的定义与类的实现分离 但是Java中类的定义与实现是在一起的, Why? 因为Java中有一个专门管接口的类叫Interface。这 个类是公开的,而其他类则被屏蔽起来。 这种方式称为对象的“包装”或称“封 装”
§控制对成员的访问 public:; private:( protected:)都是用来控制 成员函数的作用。 类的客户可通过公有成员( public)知道类提供什么样的服务。 类的客户不能直接访问类的私有成员( (private),它们只能 通过成员函数(或友元)来访问。 C++提倡编写与实现无关的程序。在类定义中尽量避免写函 数实现的代码。(也不是绝对的,只要觉得可以公开,并以 后不会改动,则可以将实现写到类的定义中) [注意]在理论上 public:; private: protected:只使用 次。但现在C+编译器(如VC++)可支持多次。而在Java中每 个函数前面都要求加上这个说明符
public:, private: ( protected: ) 都是用来控制 成员函数的作用。 类的客户可通过公有成员(public)知道类提供什么样的服务。 类的客户不能直接访问类的私有成员(private),它们只能 通过成员函数(或友元)来访问。 C++提倡编写与实现无关的程序。在类定义中尽量避免写函 数实现的代码。(也不是绝对的,只要觉得可以公开,并以 后不会改动,则可以将实现写到类的定义中) [注意]在理论上 public:, private: protected: 只使用一 次。但现在C++编译器(如VC++)可支持多次。而在Java中每 一个函数前面都要求加上这个说明符。 § 控制对成员的访问
§软件的可重用性 面向对象的程序设计的一个重要目标就是软件 的可重用性。 可重用性意味着以前的代码可以部分加以利用, 并对其余部分改写,以免整个程序重新编写 要实现可重用性,程序必须设计良好、具有较 好的可读性,并预先把需要扩展部分考虑好
§ 软件的可重用性 面向对象的程序设计的一个重要目标就是软件 的可重用性。 可重用性意味着以前的代码可以部分加以利用, 并对其余部分改写,以免整个程序重新编写。 要实现可重用性,程序必须设计良好、具有较 好的可读性,并预先把需要扩展部分考虑好
函数原型( prototype)的作用域 豪函数原型中的参数,其作用域仅限于声明中 秦例如,设有下列原型声明: double Area(double radius) radius的作用域仅在于此,不能用于程序正文其他地方,因而 可有可无。可以写成: double Area(double) * double Area (double radius=5) 可简化成 double area( double=5);
函数原型(prototype)的作用域 函数原型中的参数,其作用域仅限于声明中。 例如,设有下列原型声明: double Area(double radius); radius 的作用域仅在于此,不能用于程序正文其他地方,因而 可有可无。可以写成: double Area(double); double Area(double radius=5); 可简化成 double Area(double =5);
块作用域 在块中声明的标识符,其作用域自声明处起, 限于块中,例如: void fun (int a) int b(a) cin >> b if (b>0) b int ci c的作用域 的作用域 a的作用域
块作用域 在块中声明的标识符,其作用域自声明处起, 限于块中,例如: void fun(int a) { int b(a); cin >> b; if (b>0) { int c; ...... } } a 的 作 用 域 b 的 作 用 域 c 的 作 用 域