1、函数重载而不出错是有条件的:

(1)、这些函数位于同一域内,如同一类中、同一文件中。

(2)、这些同名函数具有不同的参数特征标(特征标是指形參的个数、类型、排列顺序等)。

2、引用特性(与指针对比):

(1)、引用在创建时必须初始化,这与指针变量的声明不同。

(2)、引用一旦初始化为指向一个对象,它就不能改变对另一个对象的引用。指针在任何时候都可以改变为指向另一个对象。

(3)、引用必须与合法内存单元相关连,不存在NULL引用;指针可以赋值为NULL。

(4)、从C++语言层面,引用和变量、对象一样。从二进制层面,引用一般使用指针来实现,引用的本质是指针,但是编译器完成了这些隐式转换。

3、有了malloc/free,为什么还需要new/delete:

C++中的new/delete除了使用方便以外,还有一个重载的原因:对于非内部数据对象,当创建对象时需要自动调用构造函数,当对象销毁时需要自动调用析构函数,而mallo/free是库函数,不再编译器权限之内,无法把调用构造/析构函数的操作强加给它们。new/delete是运算符,new能够完成动态内存分配和初始化工作,delete能够完成清除和释放内存的工作。new直接返回目标类型的指针,而malloc返回void*且必须首先显式地转换成目标数据类型后才能使用。

4、const的常见使用:

(1)、const常量代替#define定义常量。

(2)、使用const修饰函数的输入参数,当函数的输入参数为指针类型或引用类型时,为了防止有意或无意的修改它们,通常使用const修饰它们,如:                void strCopy(char *strDest, cosnt char *strSrc);

(3)、使用const修饰函数的返回值,当函数返回值不允许修改时,该函数返回值应加上const修饰,特别对于返回引用或指针的情况。

(4)、const成员函数,当一个类的某个成员函数不能修改任何一个传递给它的参数时,应当把它定义为类的const成员函数。

5、构造函数

(1)、当在类构造函数中没有明确给属性赋值时,不能假设对象的该属性值是这样的值或者那样的值,它只能是一个随机值或者说是垃圾值。

(2)、

6、类的static属性与static方法:

(1)、static属性必须初始化,不允许在类内部初始化static属性,初始化格式如下:

数据类型 类名::变量=初始化值;

(2)、类static成员函数中没有this指针;访问static成员函数有三种方式,即类名::static成员函数名(实參列表)、对象.static成员函数名(实參列表)与对象指针->static成员函数名(实參列表)。

7、赋值运算符重载:

(1)、当我们将一个对象赋值给另一个对象时,往往潜伏着类似与浅拷贝的危机,这就需要我们自己来重载赋值运算符。

(2)、在赋值运算符重载的函数体内,一般按照以下步骤来编写程序;1.)判断是否自拷贝,若是,则立即返回。2.)若不是自拷贝,则释放当前对象所占资源,并给当前对象重新申请资源,从另外一个对象中拷贝数据,然后返回。

(3)、当我们重载赋值运算符后,执行p2=p1;时,p2是=运算符的发起者,右侧的p1成为函数的参数,其调用形式像operator=(p2, p1);这样。

8、友元

(1)、友元关系是单向的。若A是B的友元,则不能推出B是A的友元。

(2)、友元关系不能传递。若A是B的友元,B是C的友元,则不能由此推出A是C的友元。

(3)、友元关系是不能继承的。

9、类的包含与聚合:

(1)、当一个类包含来自另外一个类的对象成员时,这样的类就称为包含类。

(2)、当一个类包含另外一个类的对象指针成员时,这样的类就称为聚合类。

10、对象存储的持续性:

(1)、C++使用3种不同的方案类存储数据,它们是自动存储、静态存储和动态存储。对象也是一个种变量,所以对象也有自动对象、静态对象和动态对象。

(2)、自动对象:自动对象位于栈中,它在函数体内创建对象,或者在语句块内创建对象。

(3)、静态对象:静态对象位于程序的静态数据区(或者全局数据区),这种对象在程序运行期间一直存在。

(4)、动态对象:动态对象位于堆(heap)中,有new操作符产生动态对象。

11、类的其他应用:

(1)、对象数组:类名 数组名 [数组大小];与建立内置类型数组不同,建立对象数组时必须同时初始化,因此,会调用类的构造函数。

(2)、对象指针:对象指针主要用于访问单个对象或对象数组中的元素;

12、对象形參、对象指针形參、对象引用形參:

(1)、对象作为参数传递给函数时传递的是对象的一个拷贝,而不是对象本身,因此对象形參的修改与原对象无任何关系。

(2)、对象指针作为参数传递给函数时传递的对象的地址,因此对对象指针形參的操作会影响对象内部的数据。

(3)、传递对象引用形參虽然表面上是对象形式而不是对象指针形式,但本质上还是对象指针,因此对象引用形參的修改会映射到对象变量上。

C++面向对象程序设计的一些知识点(1)的更多相关文章

  1. C++面向对象程序设计的一些知识点(5)

    摘要:运算符能给程序员提供一种书写数学公式的感觉,本质上运算符也是一种函数,因此有类内部运算符和全局运算符之分,通过重载,运算符的“动作”更加有针对性,编写代码更像写英文文章. 1.C++标准允许将运 ...

  2. C++面向对象程序设计的一些知识点(4)

    摘要:累继承可以实现源代码重用,模板技术也可以达到同样的目的.模板可以分为函数模板和类模板,其共同点是允许参数类进行类型化,编译器根据程序员传递的具体类型,又把函数模板实例化为具体函数,把类模板实例化 ...

  3. C++面向对象程序设计的一些知识点(3)

    摘要:多态性提供一组统一的调用接口函数,依据这些条用接口函数具体对象的不同,同一名字的函数会有不同的行为. 1.重载与隐藏 (1).对同一作用域中的同名函数,如果它们的函数特征标不同,那么它们就形成一 ...

  4. C++面向对象程序设计的一些知识点(2)

    1.C++中三种继承方式及派生类中访问控制规则 (1).C++支持的三种继承方式是public.protected.private.C++允许一个类同时以不同的方式对不同的基类加以继承. (2). 不 ...

  5. 对面向对象程序设计(OOP)的认识

    前言 本文主要介绍面向对象(OO)程序设计,以维基百科的解释: 面向对象程序设计(英语:Object-oriented programming,缩写:OOP),指一种程序设计范型,同时也是一种程序开发 ...

  6. 20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计

    20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 ...

  7. 2018-2019-2 20175217 实验二《Java面向对象程序设计》实验报告

    一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:吴一凡 学号:20175217 指导教师:娄嘉鹏 实验日期:2019年4月15日 实验时间:--- 实验序号:实验二 实验名称:Jav ...

  8. 20175315 实验二《Java面向对象程序设计》实验报告

    20175315 实验二<Java面向对象程序设计>实验报告 一.实验内容及步骤 1.初步掌握单元测试和TDD 单元测试 任务一:三种代码 用程序解决问题时,要学会写以下三种代码: 伪代码 ...

  9. 2018-2019-2 20175202实验二《Java面向对象程序设计》实验报告

    2018-2019-2 20175202实验二<Java面向对象程序设计>实验报告 一.实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初 ...

随机推荐

  1. Web在线文件管理器(web os) KODExplorer

    KODExplorer是款开源的Web在线文件管理.代码编辑器.它提供了类windows经典用户界面,一整套在线文件管理.文件预览.编辑.上传下载.在线解压缩.音乐播放功能.让你直接在浏览器端实现we ...

  2. 为Emacs添加标签tabbar功能

    Emacs的强大之处在于,只有你想不到,没有她做不到! 折腾了两个小时,终于在终端putty上搞定了tabbar.下面是一些资源,以方便后面的同学快速搞定. 首先下载tabbar的插件tabbar.e ...

  3. Swift代理造成内存泄漏的解决办法

    在swift中,使用代理 ,可能很多人会这样实现: .首先定义一份协议. protocol ToolProrocol{ //代理方法 func didRecieveResults(result:Int ...

  4. Python的copy()与deepcopy()区别

    Python的copy()与deepcopy()分别对应浅拷贝和深拷贝. 它们的理论区别: deepcopy():深复制(也就是寻常意义上的复制),即将被复制对象完全再复制一遍作为独立的新个体单独存在 ...

  5. eclipse的tasks使用说明

    http://blog.csdn.net/limb99/article/details/8881891tasks可以在代码里增加标识,通过tasks view可以快速的找到这些标识的地方,有助于提高开 ...

  6. 【ERROR】Oracle11g两个监听同名进程的故障

    问题: 一个实例启动了另个两个监听. 解决方法: #ps -ef | grep tnslsnr #oracle 925826 1 0 Apr 06 - 234:50 /u01/app/oracle/p ...

  7. Kafka日志清除策略

    一.更改日志输出级别 config/log4j.properties中日志的级别设置的是TRACE,在长时间运行过程中产生的日志大小吓人,所以如果没有特殊需求,强烈建议将其更改成INFO级别.具体修改 ...

  8. RHEL7虚拟机添加新网卡后,网卡无法启动

    RHEL7虚拟机添加新网卡后,网卡无法启动 1.在开启网络时,有错误提示: # systemctl restart network.service Job for network.service fa ...

  9. MFC改变对话框背景颜色

    原文链接: http://blog.sina.com.cn/s/blog_59955afc0100spjz.html 方法一:调用CWinApp类的成员函数SetDialogBkColor来实现. - ...

  10. react 事件绑定的2种常用方式

    方式一:传统 import React, { Component } from 'react'; class App extends Component { handleSubmit (e, args ...