C++ 之 class 的思考
工作多年,突然发现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 的思考的更多相关文章
- 领域驱动和MVVM应用于UWP开发的一些思考
领域驱动和MVVM应用于UWP开发的一些思考 0x00 起因 有段时间没写博客了,其实最近本来是根据梳理的MSDN上的资料(UWP开发目录整理)有条不紊的进行UWP学习的.学习中有了心得体会或遇到了问 ...
- 关于面试题 Array.indexof() 方法的实现及思考
这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...
- 关于 CSS 反射倒影的研究思考
原文地址:https://css-tricks.com/state-css-reflections 译者:nzbin 友情提示:由于演示 demo 的兼容性,推荐火狐浏览.该文章篇幅较长,内容庞杂,有 ...
- 关于.NET参数传递方式的思考
年关将近,整个人已经没有了工作和写作的激情,估计这个时候很多人跟我差不多,该相亲的相亲,该聚会喝酒的聚会喝酒,总之就是没有了干活的心思(我有很多想法,但就是叫不动我的手脚,所以我只能看着别人在做我想做 ...
- 使用NUnit为游戏项目编写高质量单元测试的思考
0x00 单元测试Pro & Con 最近尝试在我参与的游戏项目中引入TDD(测试驱动开发)的开发模式,因此单元测试便变得十分必要.这篇博客就来聊一聊这段时间的感悟和想法.由于游戏开发和传统软 ...
- OpenGL shader 中关于顶点坐标值的思考
今天工作中需要做一个事情: 在shader内部做一些空间距离上的计算,而且需要对所有的点进行计算,符合条件的显示,不符合条件的点不显示. 思路很简单,在vertex shader内知道顶点坐标,进行计 ...
- 关于领域驱动设计(DDD)中聚合设计的一些思考
关于DDD的理论知识总结,可参考这篇文章. DDD社区官网上一篇关于聚合设计的几个原则的简单讨论: 文章地址:http://dddcommunity.org/library/vernon_2011/, ...
- 关于bug分析与异常处理的一些思考
前言:工作三年了,工作内容主要是嵌入式软件开发和维护,用的语言是C,毕业后先在一家工业自动化控制公司工作两年半,目前在一家医疗仪器公司担任嵌入式软件开发工作.软件开发中,难免不产生bug:产品交付客户 ...
- 【数据库】_由2000W多条开房数据引发的思考、实践----给在校生的一个真实【练耙场】,同学们,来开始一次伟大的尝试吧。
× 缘起---闲逛博客园 前几天的时候,在某一QQ群看到一条消息“XXX酒店开房XXXBTXX迅雷BT下载”,当时是一目十行的心态浏览,目光掠过时, 第一反应我想多了~以为是XX种子(你懂的~ ...
- 对于多个数据库表对应一个Model问题的思考
最近做项目遇到一个场景,就是客户要求为其下属的每一个分支机构建一个表存储相关数据,而这些表的结构都是一样的,只是分属于不同的机构.这个问题抽象一下就是多个数据库表对应一个Model(或者叫实体类).有 ...
随机推荐
- Map拷贝 关于对象深拷贝 浅拷贝的问题
问题:map拷贝时发现数据会变化. 高能预警,你看到的下面的栗子是不正确的,后面有正确的一种办法,如果需要看的话的,请看到底,感谢各同学的提醒,已做更正,一定要看到最后 先看例子: ...
- js 作用域
js 作用域 js作用域链查找,子函数能取到父函数中定义的变量. 前段时间误写成如下形式: 这只是普通的函数调用,没有父子的关系,child()函数会在全局查找pi变量,没找到所以报错. 最近发现原来 ...
- ubuntu16 修改apache端口号
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Hannotate SC" } span.s1 { } (1)apach ...
- Dictionary<k,v>键值对的使用
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Dict ...
- python操作csv和excel文件
1.操作csv文件 1).读取文件 import csv f=open("test.csv",'r') t_text=csv.reader(f) for t,i in t_text ...
- 严重:Error listenerStart
转自: http://1985wanggang.blog.163.com/blog/static/7763833200942611050436/ 近日浏览论坛,发现好多人提问,都说在运行web程序时, ...
- SPSS数据分析—对应分析
卡方检验只能对两个分类变量之间是否存在联系进行检验,如果分类变量有多个水平的话,则无法衡量每个水平间的联系.对此,虽然可以使用逻辑回归进行建模,但是如果分类变量的水平非常多,就需要分别设定哑变量,这样 ...
- Load Runner录制C/S客户端
1. 打开应用程序 2. 点击如下菜单 弹出窗口如下 3. 点击New,弹出窗口如下,选择Web(HTTP/HTML) 4. 点击Create,弹出窗口 5. 点击OK, ...
- Tomcat部署web应用程序
对Tomcat部署web应用的方式总结,常见的有以下四种: 1.[替换ROOT目录] 最简单的一种方法,webapps目录下面ROOT文件夹的文件为你的文件,然后输入localhost:8080/首页 ...
- wind取交易日历n day数据
days=AlldaysPeriod=Mw.tdaysoffset(5,'20171212','days=Tradingdays;Period=D')