工作多年,突然发现c++这么多年都是零散记录了些自己对C++的反思,没有做过任何的文字记录表示遗憾。

看到很多小伙也都在写技术博客,那我自己也就写一写自己的一些 思考吧!

C++的基本类这个东西,想必每个学过计算机语言的同学对这个class多有自己的理解。

C++中的类其高深莫测的内部细节,与其他语言不大相同,最为C++er 应该清晰地了解一个类的内部构造以及编译器为你做了什么,

这样才能省去很多未知的坑!!

  对于一个class来说,编译器一般都会为你自动编写了 默认构造函数、拷贝构造函数、重载赋值符、析构函数。当然,如果你自己声明并实现了如上对应的函数,

编译器将不再为你提供相应的函数。 这里强调一点默认的拷贝构造函数与赋值符 内部是浅拷贝形式,如果在class内部有存在指针类型的成员变量,你就应该重载

相应的赋值符与拷贝构造函数。

  注意1:重载=号时,返回的引用  应该是*this!!

  注意1:拷贝构造与赋值符 也应该 对其所继承父类进行构造或者赋值!!!!

  c++ 有了类的概念,而且作为一个面向对象语言,就应该有封装、继承、多态 这三个面向对象语言的特性。

  一、class和struct在c++中基本没有太大区别,它俩为c++提供封装特性,class与struct的区别在于,class默认为private,而struct默认为public。

  二、c++的继承有些复杂,它支持多继承!导致臭名昭著的菱形继承的问题,当然也有解决方案,此问题后期再做讨论!

  三、C++的多态,基于继承, 父类调用相应的函数展现出不同形态就为多态。C++的多态解决了C++没有接口关键字或者接口这个东西!

    注意,如果要用多态这个特性,请你记住基类的析构函数必须是virtual!! 因为指向子类的父类指针,在析构的时候如果父类的析构函数不是virtual类型,则不会调用到

  子类的析构函数,可能造成资源泄露!  相反:如果这个类不是用作基类或者多态来用,不应该声明virtual 析构!!!!

     同理 你如果要使用多台这个特性,virtual的虚成员函数,可以构建一个虚函数表让父类调用函数时明确调用的具体函数!当然一个class的虚函数表是在整个类的最前端!

     说到virtual 还有一个重要的情况需要记录在案!那就是最好不要在析构和构造中调用 virtual函数,因为,父类和子类的构造析构顺序的原因,子类在构造或析构期间,

    有可能之调用的是父类函数,或者父类已经析构,都会造成未知的错误!!!

    

C++ 之 class 的思考的更多相关文章

  1. 领域驱动和MVVM应用于UWP开发的一些思考

    领域驱动和MVVM应用于UWP开发的一些思考 0x00 起因 有段时间没写博客了,其实最近本来是根据梳理的MSDN上的资料(UWP开发目录整理)有条不紊的进行UWP学习的.学习中有了心得体会或遇到了问 ...

  2. 关于面试题 Array.indexof() 方法的实现及思考

    这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...

  3. 关于 CSS 反射倒影的研究思考

    原文地址:https://css-tricks.com/state-css-reflections 译者:nzbin 友情提示:由于演示 demo 的兼容性,推荐火狐浏览.该文章篇幅较长,内容庞杂,有 ...

  4. 关于.NET参数传递方式的思考

    年关将近,整个人已经没有了工作和写作的激情,估计这个时候很多人跟我差不多,该相亲的相亲,该聚会喝酒的聚会喝酒,总之就是没有了干活的心思(我有很多想法,但就是叫不动我的手脚,所以我只能看着别人在做我想做 ...

  5. 使用NUnit为游戏项目编写高质量单元测试的思考

    0x00 单元测试Pro & Con 最近尝试在我参与的游戏项目中引入TDD(测试驱动开发)的开发模式,因此单元测试便变得十分必要.这篇博客就来聊一聊这段时间的感悟和想法.由于游戏开发和传统软 ...

  6. OpenGL shader 中关于顶点坐标值的思考

    今天工作中需要做一个事情: 在shader内部做一些空间距离上的计算,而且需要对所有的点进行计算,符合条件的显示,不符合条件的点不显示. 思路很简单,在vertex shader内知道顶点坐标,进行计 ...

  7. 关于领域驱动设计(DDD)中聚合设计的一些思考

    关于DDD的理论知识总结,可参考这篇文章. DDD社区官网上一篇关于聚合设计的几个原则的简单讨论: 文章地址:http://dddcommunity.org/library/vernon_2011/, ...

  8. 关于bug分析与异常处理的一些思考

    前言:工作三年了,工作内容主要是嵌入式软件开发和维护,用的语言是C,毕业后先在一家工业自动化控制公司工作两年半,目前在一家医疗仪器公司担任嵌入式软件开发工作.软件开发中,难免不产生bug:产品交付客户 ...

  9. 【数据库】_由2000W多条开房数据引发的思考、实践----给在校生的一个真实【练耙场】,同学们,来开始一次伟大的尝试吧。

      ×   缘起---闲逛博客园 前几天的时候,在某一QQ群看到一条消息“XXX酒店开房XXXBTXX迅雷BT下载”,当时是一目十行的心态浏览,目光掠过时, 第一反应我想多了~以为是XX种子(你懂的~ ...

  10. 对于多个数据库表对应一个Model问题的思考

    最近做项目遇到一个场景,就是客户要求为其下属的每一个分支机构建一个表存储相关数据,而这些表的结构都是一样的,只是分属于不同的机构.这个问题抽象一下就是多个数据库表对应一个Model(或者叫实体类).有 ...

随机推荐

  1. [地图SkyLine二次开发]关于IE内存限制问题(1G)

    相信很多人也遇到过同样的问题,地图加载中,IE占用的内存一直增加,到了1G多一些的时候,IE就崩溃了. 在网上查阅了一番,有很多结果,下面归纳一下: a).64bit的IE最多可达到4G的内存,但Sk ...

  2. A*算法 -- 八数码问题和传教士过河问题的代码实现

    前段时间人工智能的课介绍到A*算法,于是便去了解了一下,然后试着用这个算法去解决经典的八数码问题,一开始写用了挺久时间的,后来试着把算法的框架抽离出来,编写成一个通用的算法模板,这样子如果以后需要用到 ...

  3. jsp中jstl标签的类似 if - else 语句 的语法

    在jsp中引入jstl的标签库和函数库 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c&q ...

  4. Linux查找

    如果你想在当前目录下 查找"hello,world!"字符串,可以这样: grep -rn "hello,world!" * * : 表示当前目录所有文件,也可 ...

  5. ThinkPHP的URL重写+路由+伪静态,实现SEO效果。

    1.URL重写,隐藏网址中的Index.php. ThinkPHP 作为 PHP 框架,是单一入口的,那么其原始的 URL 便不是那么友好.但 ThinkPHP提供了各种机制来定制需要的 URL 格式 ...

  6. HTML5 十大新特性(五)——SVG绘图

    相对于canvas绘图,SVG是一种绘制矢量图的技术.全称叫做Scalable Vector Graphics,可缩放的矢量图,在2000年就已经存在,H5把它纳入了标准标签库,并进行了一些瘦身.需要 ...

  7. JavaScript实现快速排序

    思想: 通过分治思想.递归方法将数据依次分解为包含较小元素和较大元素的不同子序列 1.在数组中选择一个元素为基准 2.对数组进行遍历,小于基准的元素都移到基准的左边,大于基准的元素都移到基准的右边 3 ...

  8. 【Delphi7】 解决“程序第一次可以正常编译,但再次编译的时候会报错,必须重新打开Delphi”的问题

    报错如下: Access violation at address 00495044 in module 'coreide70.bpl'. Read of address...Access viola ...

  9. 用于阻止div上的事件和div上的按钮的事件同时触发

    event.stopPropagation()  阻止事件冒泡  用于ie11以上

  10. explain 执行计划详解

    id:id是一组数字,表示查询中执行select子句或操作表的顺序,如果id相同,则执行顺序从上至下,如果是子查询,id的序号会递增,id越大则优先级越高,越先会被执行. id列为null的就表是这是 ...