工作多年,突然发现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. 【转】linux中do{...} while(0)的解释

    在看ldlm的代码过程中遇到了一个很奇怪的问题,有很多宏定义使用了do while(0)这种看起来好像没啥用的代码.然后我就问问师兄,才得知,这种用法很常见,自己又查了一下资料,原来在linux内核代 ...

  2. 百川即时通讯跨appkey问题解决

    当前调用的sdk版本为: <script src="https://g.alicdn.com/aliww/??h5.openim.sdk/1.0.6/scripts/wsdk.js,h ...

  3. jq弹出一个透明小提示窗,然后逐渐消失

      function show_main(content) { var showWindow = '<div id="show_main" style="borde ...

  4. PHP控制div块大小和颜色的例子

    网站为了设计的更好看,会有很多的样式,而用php来控制样式很常见,无聊写了一个可以用于列表展示的样式,不喜忽喷. 1.先添加一个style样式控制div默认不换行 <style>div{f ...

  5. 【译】Learn ES2015——箭头函数

    原文:https://babeljs.io/learn-es2015/ 理解也许有偏差,欢迎指正 箭头函数 不同于函数,箭头函数和包裹它的代码拥有同一个this.如果一个箭头函数在一个function ...

  6. springMVC 错误页面配置

    在Spring MVC应用程序中,404 error code 被合适的配置.web.xml文件中配置如下所示: <!-- spring mvc start --> <servlet ...

  7. javascript 实现tab菜单切换

    <!DOCTYPE html> <html> <head> <title></title> </head> <body s ...

  8. img标签 加载FTP的图片 C#

    好吧,我是菜鸟,这是我今天遇到的问题,什么也不会,得高人指点 1.使用FtpWebRequest下载图片,以流存贮 2.在ashx文件里面直接已流方式(HttpContext.Current.Resp ...

  9. mysql数据的行列转换

    动态,适用于列不确定情况,第一种: SET @EE=''; SELECT GROUP_CONCAT('SUM(IF(C2=\'',C2,'\'',',C3,0)) AS ',C2)INTO @EE F ...

  10. Struts2 Action下面的Method调用方法

    1. 在struts.xml中加入<constant name="struts.enable.DynamicMethodInvocation" value="tru ...