1. 面向对象程序设计的特点

  1.1 抽象

  1.2 封装

  1.3 继承

  1.4 多态

    (1) 分为:强制多态、重载多态、类型参数化多态、包含多态

    (2) 强制多态:类型转换

    重载多态:

  类型参数化多态和包含多态属于一般多态性,是真正的多态。C++中采取虚函数实现包含多态。虚函数是多态的精华。模板是参数化多态的工具,分为函数    模板和类模板

2. 类和对象

  2.1 这个理解的比较清楚,就以一个例子说明下用法吧

  

 //clock.h

 class Clock

 {

     public:

       void setTime(int newH, int newM, int newS);

       void showTime()//默认为内联函数,也可以前面加inline显示说明

       {

           cout<<hour<<”:”<<minitu<<”:”<<second<<endl;

       }

     private:

         int hour, minute, second;

 }

 //clock.c

 void Clock::setTime(int newH, int newM, int newS)

 {

     hour = newH;

     minute = newM;

     second = newS;

 }        

3. 构造函数与析构函数

  3.1 构造函数的作用是在对象被创建时利用特定的值初始化构造对象。对象被创建时自动调用。与类同名。没有返回类型。

  3.2 如果类中没有写构造函数,编译器会自动生成一个隐含的默认构造函数,参数表和函数体皆为空。如果类中声明了构造函数(不管是否有参数),编译器则不再生成构造函数。

  3.3 复制构造函数

  (1) 复制构造函数是一种特殊的构造函数,具有一般构造函数的特性,其形参是本类的对象一个引用。其作用是使一个已经存在的对象(由复制构造函数的参数指定)去初始化同类的一个新对象。

  (2) 程序员可以根据实际问题的需要定义特定的复制构造函数,实现同类对象之间数据成员的传递。如果程序员没有定义类的复制构造函数,系统会在必要时自动生成一个隐含的复制构造函数。这个隐含的复制构造函数的功能是把初始值对象的每个数据成员的值都复制到新建立的对象中。???

  class 类名{

    public:

类名(类名 & 对象名);

  }

  类名:类名(类名 & 对象名)

  {

函数体

  }

  (3) 构造函数在以下三种情况下都会被调用

    ① 当用类的一个对象去初始化该类的一个对象时

    Point a;

    Point b(a);

    Point c = a;//这两种都能调用复制构造函数,只是写法上不同

    ② 如果函数的形参是类的对象如:

    

 void function(Point a){};

 int main(){

     Point a(,);

     f(a);//此时

 }

  提示:只有把对象用值传递,才会调用复制构造函数,如果传递引用,则不会调用复制构造函数。因此,传递比较大的对象时,传递引用比值传递效率要高

  ③ 如果函数的返回值是类的对象,函数执行完返回调用者时

 Point function(){

   Point a;
  return a;
6 } int main()
9
{ Point b = function(); //此时
}

  3.4 析构函数

    (1) 无返回类型、无参数

    (2) ~类名(){};

    (3) 先自己析构,再成员析构

  3.5 类的组合

    (1) 类的组合就是内嵌类,包含与被包含的关系

    (2) 创建类的对象时,如果这个类具有内嵌对象成员,则个内嵌对象首先被自动创建。因此即要对本类的基本类型数据成员进行初始化又要对内嵌对象进行初始化。

    (3) 形式:

    类名::类名(形参表):内嵌对象1(形参表1),内嵌对象2(形参表2),...

    {

      类的初始化

    }

    (4) 创建一个组合类对象时,不仅自身的构造函数需要调用,而且调用内嵌类的构造函数,顺序如下

      ① 调用内嵌对象的构造函数,调用顺序按照内嵌对象在组合类的定义中出现的顺序,与构造函数初始化列表的顺序无关。

      ② 执行本类构造函数的函数体

      ③ 注意:没有默认构造函数的内嵌对象以及引用类型的数据成员必须用初始化参数列表。因为无默认构造函数的必须提供参数;引用型变量必须在初始化时     绑定引用的对象。

    (5) 析构函数的析构顺序与构造函数顺序相反

    (6) 前向引用声明

      ① 就是在引用未定义的类之前,将该类的名字告诉编译器,使编译器知道那是个类名

4.  结构体和联合体

  (1) 结构体和类的唯一区别就是结构体的默认访问类型是public,类似private

  (2) 联合体union:

    ① 联合体是一种特殊形态的类,可以有自己的数据成员和函数成员,可以有自己的构造与析构函数,可以访问控制权限。默认访问类型是公共类型。

    ② 联合体全部数据成员共享同一组内存单元

    ③ 定义方法:

      union Mark{

       共有成员;

      protected:

      保护成员;

      private:

      私有成员;

      }

    ④ 限制:

      A.  联合体的个对象成员不能有自定义构造函数、自定义析构函数、重载的复制赋值运算符

      B.  联合体不能继承,不支持多态

      C. 一般情况下只用联合体来存储一些共有数据,不为他定义函数成员

    ⑤ 联合体可以不声明名称,称为无名联合体。无名联合体没有标记名,只声明一个成员项的集合,这些成员向具有相同的内存地址,可以由成员项直接访      问,如:

    

union{
int i;
float f;
}
//程序中可以这样使用
i = ;
f = 2.2;

C/C++基础知识总结——类与对象的更多相关文章

  1. java 基础知识九 类与对象

    java  基础知识九  类与对象 1.OO(Object–Oriented )面向对象,OO方法(Object-Oriented Method,面向对象方法,面向对象的方法)是一种把面向对象的思想应 ...

  2. Python基础知识:类

    初级篇 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 1.面向对象三大特性 ...

  3. C#核心基础--浅谈类和对象的概念

    浅谈类和对象的概念 一.什么是类?什么是对象? 学习一门面向对象编程语言,我们必须得知道什么是类?什么是对象? 类(Class)实际上是对某种类型的对象定义变量和方法的原型.它表示对现实生活中一类具有 ...

  4. Java基础 之二 类和对象

    1.基础概念 1) 概念 简单来说,类是具有相同特征事物的抽象,比如有轮子的都可以抽象为车:对象则可以看做类的具体实例,比如创建一个法拉利的车,就是车这个类的实例. 抽象.封装.继承.多态是类的四个特 ...

  5. Java基础_0302:类和对象

    定义类 class Book { // 定义一个新的类 String title; // 书的名字 double price; // 书的价格 /** * 输出对象完整信息 */ public voi ...

  6. Python基础之初识类和对象

    我们在前面学习了解了面向过程编程,接下来我们一起来学习一下面向对象编程.其实不管是面向过程,还是面向对 象,说白了就是一种编程方式而已.既然是面向对象编程,顾名思义,此编程方式的落地需要使用 “类” ...

  7. spark快速开发之scala基础之3类,对象,特征

    类 scala的类定义非常灵活 class test4 class test2{} class test3(x:Int) 定义一个带构造函数的类 class Point (x : Int,y : In ...

  8. Js基础知识2-对象、对象属性全解

    Object对象 Object对象包含如下属性和方法,也就意味着一切对象(函数也是对象)都包含如下方法. 每种方法和属性在不同的对象中有不同的作用,并不是每种对象都有使用每个方法的必要. 下面是Obj ...

  9. C++基础知识 基类指针、虚函数、多态性、纯虚函数、虚析构

    一.基类指针.派生类指针 父类指针可以new一个子类对象 二.虚函数 有没有一个解决方法,使我们只定义一个对象指针,就可以调用父类,以及各个子类的同名函数? 有解决方案,这个对象指针必须是一个父类类型 ...

随机推荐

  1. .NET 各种问题汇总

    1.i++ 与++i的区别 using System; class TestApp { public static void Main() { int i = 8; int count = ++i;/ ...

  2. CSS3+HTML5特效4 - 横向无缝滚动

    先看例子 This is a test 1. This is a test 2. This is a test 3. This is a test 4. This is a test 5. This ...

  3. CSS3+HTML5特效2 - 翻转效果

    先看效果,鼠标移上去看看. back front 1. 本实例需要以下元素 a. 容器BOX b. 默认显示元素FRONT c. 翻转显示元素BACK 2. 容器BOX的Height为200px,Wi ...

  4. 08. 删除重复&海量数据

    原文:08. 删除重复&海量数据 重复数据,通常有两种:一是完全重复的记录,也就是所有字段的值都一样:二是部分字段值重复的记录. 一. 删除完全重复的记录完全重复的数据,通常是由于没有设置主键 ...

  5. Linux server关闭自己主动

    公司linux server发生错误.mysql server没有理由关闭,我找不到理由.Version: '5.6.13-enterprise-commercial-advanced' socket ...

  6. openstack shelve/unshelve/stop浅析

    声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! stop的虚拟机仅仅是将虚拟 ...

  7. android 当目录路径从n层按back键退回到n-19层的时候,file manager自己主动退出

    当目录路径从n层按back键退回到n-19层的时候,file manager自己主动退出,比方在63层按back 键退回到44层的时候,file manager自己主动退出.   1.FileMana ...

  8. Thrift实现C#通讯服务程序

    Thrift初探:简单实现C#通讯服务程序 好久没有写文章了,由于换工作了,所以一直没有时间来写博.今天抽个空练练手下~最近接触了下Thrift,网上也有很多文章对于Thrift做了说明:       ...

  9. JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承

    说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象J ...

  10. bootstrap-paginator 分页插件笔记

    [MVC]bootstrap-paginator 分页插件笔记   bootstrap-paginator基于bootstrap框架,使用起来非常简单.官网:http://harttle.github ...