//倒计时#include <iostream>#include <ctime>using namespace std;class Clock{ int h; int m; int s;public : void set( int h, int m , int s ); void tick(); void show(); void run();};void Clock::set(int ho, int mo, int se ){ h = ho; m = mo; s = se;}void Clock::tick(){ time_t t = time(NULL); while(time(NULL)==t); if(-- s<0){ s = 59; if(--m < 0 ){ m = 59; if(--h < 0) h = 23; } }}void Clock::show(){ cout << '\r'; if(h<10) cout << 0; cout << h << ':'; if(m<10) cout << 0; cout << m << ':'; if(s<10) cout << 0; cout << s << flush;}void Clock::run(){ while(h!=0||m!=0||s!=0){ tick(); show(); } cout << "time out!" << endl;}int main(){ Clock c; c.set(0,1,5); c.run();}
面向对象编程
* 定义和实现类
* 创建对象
* 使用对象
跟类同名的函数叫构造函数,无返回类型,因为它是自动调用的
结构和类最大的区别是:结构里的成员默认是完全公开的,谁都能访问,而类不行.
结构还可以通过{}来初始化,而类却不行,只能通过构造函数来初始化.
class A{ int n; const double d;public: A():n(0),d(0.0)/*初始化列表*/{ cout << "Call A()" << ednl; } A(int n):n(n),d(120.0){ cout << "Call A(int)" << endl; }}int mian(){ A al; A a2(100); A a3();//像一个函数申明,不会分配空间,不能这样写}
类的初抬化(与赋值不同):初始化列表,:成员变量名(初始化值),多项用豆号隔开.
常量可以初始化,但是不能赋值.
注意:初始化列表不能用来初始化数组和结构变量.
形参可以有默认值.//这一特性可以简化程序
构造函数比较适合做一些准备性的工作.
----------------------------
* 析构函数 : ~类名,也叫解构函数,解构器,析构器
它是用来做收尾工作的,被自动调用.
析构函数总是没有形参.它也不能重载.
析构函数应该是公开的.
全局变量会在所有其它变量之前创建,之后释放.
从来没必要去调用析构函数.
析构的顺序与构造的顺序恰恰相反.
pase error at the end of unput //表示少了大括号
全局变量在main方法前面就已经形成了.
全局对象的构造函数在main前调用.
当不写构造函数时,系统会自动生一个无参的构造函数,如果
自已写构造函数了,系统将不再提供构造函数.
----------------------------------
对象指针:this,A* p
对象指针与结构指针一样,此处不再赘述.
对象也可以有别名 A a; A& b = a;//此时a,b将是一样
* 面向对象理论
用类做封装工作
自然界中的任何一个实体都看成一个对象.
分析并分解出某个问题中的种种对象,也就是找名词.
准确的描述所有对象之间的种种关系.
找到它们之间的相互关系.
用类来定义程序结构.
对所有对象进行抽象总结
1, 名称
2, 属性
3, 行为
程序 = 数据 + 算法
算法 = 函数 + 控制流程
c++中的封装是由类来完成的.
* 封装
* 继承
* 多态
相关资源:《C++面向对象程序设计》课后习题答案详解