一、面向对象编程
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)在成员函数/构造函数中明确表示所引用的变量是一个成员变量,以避免和同名的参数变量以及局部变量发生冲突。

c++ 03的更多相关文章

  1. Android游戏开发实践(1)之NDK与JNI开发03

    Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...

  2. Java多线程系列--“JUC锁”03之 公平锁(一)

    概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...

  3. iOS系列 基础篇 03 探究应用生命周期

    iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...

  4. javaSE基础03

    javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...

  5. UML大战需求分析——阅读笔记03

    读<UML大战需求分析>有感03 状态机图和活动图在样子比较相似,但状态机图是用来为对象的状态及造成状态改变的事件建模.我们大二学习UML统一建模语言状态机图模块时了解到,UML的状态机图 ...

  6. 2016-1-28 图解HTTP(03)

    6.2.5 非HTTP/1.1首部字段        不限于RFC2616中定义的47种首部字段,还有Cookie.Set-Cookie和Content-Disposition等在其他RFC中首部字段 ...

  7. ReactNative新手学习之路03真机调试

    React Native新手入门03真机调试(iOS) 从设备访问开发服务器 在启用开发服务器的情况下,你可以快速的迭代修改应用,然后在设备上查看结果.这样做的前提是你的电脑和设备必须在同一个wifi ...

  8. 【三石jQuery视频教程】03.创建垂直时间表(Timeline)

    视频地址:http://v.qq.com/page/g/i/o/g0150rvi6io.html 大家好,欢迎来到[三石jQuery视频教程],我是您的老朋友 - 三生石上. 今天,我们要通过基本的H ...

  9. javascript基础03

    javascript基础03 1. 算术运算符 后增量/后减量运算符 ++ ,-- 比较运算符 ( >, <, >=, <=, ==, !=,===,!== ) 逻辑运算符( ...

  10. service 03 iis之服务器无访问权限

    这两天在Service 03 的iis 6.0 里面配置一个aspx 的网站 ,总是遇到一个问题  401.2   无权限访问,于是去百度了一下好多的方法,基本上是关于设置匿名用户,打开IUSER用户 ...

随机推荐

  1. 在CentOS/RHEL 6.5上安装Chromium 谷歌浏览器

    之前Google就说了,由于CentOS/RHEL 6已经是过期的系统,所以不再会有Chrome了. 虽然后来由于引起了社区的抗议,从而改口,不再提CentOS/RHEL 6是过期系统了:但是,目前在 ...

  2. 详细介绍如何使用kindEditor编辑器

    今天群里的朋友问我能不能写个kindEditor编辑器的使用教程,说是弄了半天没有搞定.由于PHP啦后台正好用了这个编辑器,我有写经验,正好教他的同时写出来分享给大家. kindEditor编辑器是一 ...

  3. python数据类型-布尔值

    布尔是计算机里最基本的判断单位,布尔只有两个值:真或假,即True False,也就是1或0. 在以后学习流程控制时会经常用到布尔值. 先来看简单的小例子: >>> 1+1 > ...

  4. how tomcat works 读书笔记(一)----------一个简单的webserver

    http协议 若是两个人能正常的说话交流,那么他们间必然有一套统一的语言规则<在网络上server与client能交流也依赖与一套规则,它就是我们说的http规则(超文本传输协议Hypertex ...

  5. JMeter创建FTP测试

    FTP服务主要提供上传和下载功能.有时间需要我们测试服务器上传和下载的性能.在这里我通过JMeter做一个FTP测试计划的例子. * 使用的是JMeter2.4版本. * 测试的服务器是IP:124. ...

  6. [RxJS] Basic DOM Rendering with Subscribe

    While frameworks like Angular 2 and CycleJS provides great ways to update the DOM and handle subscri ...

  7. Notification (通知)的 新版和旧版用法

    Notification (通知)的 新版和旧版用法   一.先来看旧版,Api 11 之前的用法: NotificationManager manager = (NotificationManage ...

  8. 关于java WEB下载

    web.xml配置mapping  页面直接配置路径就可下载 <mime-mapping>  <extension>doc</extension>  <mim ...

  9. OpenGL ES 2.0 摄像机与投影

    1.摄像机的设置 摄像机的位置坐标 摄像机的位置 摄像机up方向 Matrix.setLookAtM( mVMatrix, //存储生成矩阵元素的float[]类型数组 0, //填充起始偏移量 cx ...

  10. 什么是MemCache

    Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等.简单的说就是将数据调用到内 ...