zoukankan      html  css  js  c++  java
  • c++ 03

    一、面向对象编程
    1.什么是对象?什么是对象编程?
    1)万物皆对象
    2)世界是由一组相互之间紧密联系的对象组成的。
    3)通过将对象按照属性和行为共性进行分类,达到将具体事物进行抽象的效果。
    4)通过程序的语法表达对象属性和行为的抽象——面向对象。
    5)将面向对象的思想应用于编程的过程——面向对象编程(OOP)。
    2.为什么要面向对象?
    1)面向对象的编程思想适合于大型软件的开发。
    2)面向对象的编程方法能够有效地提高软件开发的效率。
    3)借助强大的逻辑建模能力将问题域和方法域有机地统一起来。
    4)软件工业的发展趋势。
    3.怎么面向对象?
    1)熟练掌握至少一种面向对象程序语言,如C++。
    2)精通至少一种面向对象元语言,如UML。
    3)深入学习设计模式(GOF)和面向对象的设计方法。

    二、类
    学生
        属性:姓名、年龄
        行为:学习
    类就是通过对属性和行为的抽象,描述一组对象的语法结构。
    1.类的定义
    class 类名 {
    };

    class Student {
    };
    2.通过成员变量表达属性
    class 类名 {
      类型 成员变量名;
    };

    class Student {
      string m_name;
      int m_age;
    };
    3.通过成员函数表达行为
    class 类名 {
      返回类型 成员函数名 (形参表) {
        函数体;
      }
    };

    class Student {
      string m_name;
      int m_age;
      void learn (const string& lesson) {
        ...
      }
    };
    将成员函数声明和定义分开
    class Student {
      string m_name;
      int m_age;
      void learn (const string& lesson);
    };
    void Student::learn (
      const string& lesson) {
      ...
    }
    4.通过访控属性约束属性和行为的访问方式
    访控属性
    公有成员:public,谁都可以访问。
    私有成员:private,只有自己可以访问。
    保护成员:protected,只有自己和自己的子类可以访问。
    class Student {
    private:
      string m_name;
      int m_age;
    public:
      void learn (const string& lesson) {
        ...
      }
    };
    5.构造函数
    class 类名 {
      类名 (形参表) : 初始化表 {
        函数体;
      }
    };
    当该类的对象被创建时,相应类型的构造函数被自动执行。创建对象的同时提供构造实参表,与构造函数的形参匹配。
    1)构造函数可以重载
    2)缺省构造函数
    如果一个类中没有定义任何构造函数,那么系统就会自动为其提供一个无参构造函数,谓之缺省构造函数。缺省构造对于基本类型的成员变量不做初始化,而对于类类型的成员变量,则通过相应类型的无参构造函数初始化。
    3)几个有特殊用途的构造函数
    A.无参构造函数:默认的初始化
    Student::Student (void) { ... }

    Student::Student (const string& name = "", int age = 0) { ... }
    Student student;
    B.类型转换构造函数:自定义的类型转换
    A::A (const B& b) { ... }
    A::A (B b) { ... }
    B b;
    A a = b;
    A a (b);
    void foo (A a) { ... }
    foo (b);
    A foo (void) {
      B b;
      return b;
    }
    通过explicit关键字可以指明通过该构造函数所完成类型转换必须显式地进行。
    C.拷贝构造函数:同类型对象的克隆
    A::A (const A& that) { ... }
    如果一个类中没有定义拷贝构造函数,系统就会自动提供一个缺省的拷贝构造函数,该函数对于基本类型的成员变量,按字节复制,对于类类型成员变量,调用相应类型的拷贝构造函数,完成复制。在绝大多数情况下,缺省拷贝构造函数足够适用,不需要自己定义拷贝构造函数。
    class A {}; // 无参(缺)、拷贝(缺)
    class A {
    public:
      A (void) {} // 无参(自)、拷贝(缺)
    };
    class A {
    public:
      A (int a) {} // 有参(自)、拷贝(缺)
    };
    class A {
    public:
      A (const A& that) {} // 拷贝(自)
    };
    4)初始化表
    A.语法
    类名::类名 (构造形参表) : 成员变量 (初始值), ... { ... }
    B.必须使用初始化表的场合
    a)含有类类型成员变量,而该变量的类型没有无参构造函数。
    b)含有常量或引用型成员变量。
    const int a;
    a = 10;
    int& r;
    r = b;
    c)拥有不带无参构造函数的基类。
    C.成员变量的初始化顺序仅与其在类中被声明的顺序有关,而与其在初始化表中出现的顺序无关。
    class X {
    public:
       X (string str) : m_str (str),
         m_len (m_str.length ()) {}
       int m_len;
       string m_str;
    };
    6.把类的声明和实现分开
    实际开发过程中通常将类的声明部分放在.h中,实现放在.cpp中。
    练习:实现一个Clock类,在构造函数中将Clock初始化为当前系统时间或者初始化为00:00:00,通过成员函数在屏幕上显示电子钟。
    16:09:26
    time/localtime
    7.在C++中类和结构没有任何本质性的区别,唯一的不同就是类成员的缺省访控属性为私有,而结构为公有。

    三、this指针
    1.一般而言,关键字this是一个指针,在普通成员函数中this指针指向调用该成员函数的对象,在构造函数中this指针指向这个正在被构造的对象。
    2.应用场景
    1)在成员函数/构造函数中明确表示所引用的变量是一个成员变量,以避免和同名的参数变量以及局部变量发生冲突。

  • 相关阅读:
    洛谷 P1037 产生数
    阿里实习储备知识
    腾讯后台开发面试总结(别人的)
    两个栈实现队列的功能
    栈里的元素升序排列
    二叉树路径和
    硬币组合问题
    九月十月百度,迅雷,华为,阿里巴巴笔试面试六十题(第411~470题)
    轻松搞定面试中的二叉树题目
    july教你如何迅速秒杀掉:99%的海量数据处理面试题
  • 原文地址:https://www.cnblogs.com/elisha-blogs/p/3780680.html
Copyright © 2011-2022 走看看