20170519

一、面向对象编程
    1.1
    老师.问问题(学生) {
        学生回答问题;
    }
    程序就是一组对象相互的发消息
    一个对象都是有自己或者有其它对象构成的
    每一个对象都有一个类型
    相同类型的对象都能接收相同的消息(函数)
    1.2 现实世界和虚拟世界
    现实世界 --> 抽取这个类别的核心特征 --> 这个类型对象的功能 --> 计算机世界
    学生 --> name, age, school --> 学习(), 吃饭() --> 计算机世界
    特征在计算机中,功能在代码区中
    
    计算机世界用类型和类型中的特征,创建对象
    编译器负责把对象和行为联系起来
    计算机中也有具体和抽象,抽象的是类型,具体的是对象
    
二、划分一个类别把现实中的对象描述清楚,只要把握这组对象的行为和特征

 

三、使用class描述一个类型的行为和特征
    struct -----> class
    class 所有的数据默认变为私有 private
    struct 所有的数据默认变为公有 public
  1 #include <iostream>
  2 #include <ctime>
  3 #include <cstdio>
  4 using namespace std;
  5 class MyTime {
  6     public:
  7     /*特征*/
  8     int hour;
  9     int min;
 10     int sec;
 11     /*行为*/
 12     void showMyTime() {
 13         printf("%02d:%02d:%02d\r", hour, min, sec);
 14         fflush(stdout);
 15     }
 16     void setMyTime(int h = 0, int m = 0, int s = 0) {
 17         hour = h;
 18         min = m;
 19         sec = s;
 20     }
 21     /*时间走一秒*/
 22     void dida() {
 23         sec++;
 24         if(60 == sec) {
 25             sec = 0;
 26             min++;
 27             if(60 == min) {
 28                 min = 0;
 29                 hour++;
 30             }
 31         }
 32     }
 33     void run() {
 34         while(1) {
 35             //sleep(1);
 36             time_t t = time(NULL);
 37             while(t == time(NULL));
 38             dida();
 39             showMyTime();
 40         }
 41     }
 42 };
 43
 44 int main() {
 45     MyTime mytime;
 46     mytime.setMyTime(11,59,58);
 47     mytime.showMyTime();
 48     mytime.dida();
 49     mytime.dida();
 50     mytime.showMyTime();
 51     mytime.run();
 52 }
 
 protected    保护权限     在类内和子类中可以访问
 四、如何初始化对象
     MyTime mytime;
     4.1 构造函数
        这个函数和类型名同名
        没有返回类型
        能保证在构建一个对象时自动调用一次
        目的:初始化对象
        如果一个类没有定义任何构造函数,则编译器自动分配一个无参的构造函数
        如果提供了一个构造函数,则编译器会自动覆盖掉默认的
     4.2 一个对象的创建过程
        1. 编译器根据类型大小分配内存
        2. 普通的成员变量不做任何操作,但如果成员变量是自定义类型就构建它
        3. 调用构造函数
     4.3 初始化参数列表
        在构造函数调用之前执行
        const类型的成员或者引用类型成员需要在构造函数之前去初始化
        
        构造函数参数列表之后 实现体之前 要以冒号开头
          1 #include <iostream>
          2 using namespace std;
          3 class A {
          4     const int a;
          5     int &b;
          6     public:
          7     A(int pa, int pb):a(pa), b(pb) {
          8         //a = pa;
          9         //b = pb;
         10     }
         11     void show() {
         12         cout << a << " " << b << endl;
         13     }
         14 };
         15
         16 int main() {
         17     A a(1, 2);
         18     a.show();
         19 }

  4.4 头文件和实现文件分离
         1. 编写头文件
             定义类型, 声明全局变量, 函数声明
             防止头文件的重复包含
         2. 编译头文件
         3. 编写实现文件
             函数和全局变量在一个专门的文件中实现
             类型实现 自己的实现文件
                包含头文件
                去掉函数的参数默认值
                在每个函数名前加上类名::
         4. 编译实现文件
         5. 测试实现文件

 

posted @ 2017-05-19 14:08  小不懂装懂  阅读(121)  评论(0编辑  收藏  举报