这几天真的太忙了,连博客都忘记写了。
想来已经半个月没有写了。毕业设计真的是应该早点去搞,等到要赶设计的时候,总有力不从心的时候。毕竟一心两用后果自负!本来想把之前学的socket还有附带的做的项目整理出来的,只能看看有没有时间了。现在必须把c++眼前的东西好好整理了。人都是靠逼出来的。废话不多说。
——————————————————————————————————————————————————
想学习c++就应该去了解c和c++之间的区别,才能更加快速的切入c++学习。
c语言是面向过程的,而c++是既可以面向过程,还可面向对象和泛型编程。从感觉上,c语言的对问题的解决主要靠对问题各个地方的了解,很操心实现的过程。面向过程的是(程序=算法+数据结构),面向对象则是(对象:数据结构+算法;程序=(对象+对象+对象+。。。)<-对象之间的通信机制)(封装,继承,多态)
对于大工程,using namespace 会很好的解决c语言的命名空间不够用的,很繁琐的缺点。
c++强大的库,加上重载机制,编程起来真的很方便!
细节方面:&(引用),一个变量可以有多个引用,但是&并不占内存但是c语言取地址(&)需要赋给一个指针(占有内存)。(http://m.blog.csdn.net/article/details?id=10260339)
重载,函数重载,运算符重载:对于函数重载,对于类似功能但是入参不可能不太一样的时候,函数重载带来了方便,编译器会判定入参类型,来匹配相应的函数。__mul__int__int;__mul__float__float__。运算符重载,就是对对象运算的机制,c语言不支持运算符重载。c++对于对象的适用性很强。这也是c++的优点。
还有一些区别在与结构体和类,还有new,delete----mallco,free,类分共有私有和保护,但是结构体没有这样的区别,类很好的保护类内部数据。new和delete其实就是像构造函数和析构函数,mallco,free需要自己取计算字节大小,c++更加方便。
还有就是内联函数(inline) 五句以下使用频率非常高可以主动嵌入到主调函数中。
不知道有没有错误。。。大致的区别就是这样。总得来说c++更加适合软件开发大方向,c语言则是软件开发的小细节。
——————————————————————————————————————————————————
讲到c++就不得先说类这个概念OOP思想经典模型,就是抽象,封装,分类,多态。对象的抽象就是类,对象就是类的具体化。
构造函数:
是一种特殊的成员函数,主要完成对象的初始化工作的。--添加2017-04-12 10:12:42--构造函数可以用来完成对象创建之后不方便完成的事,赋予对象合理的初始值,最好使用参数列表来实现赋初值,提高效率。
特点: 1.没有返回值 2.函数名必须和类名相同 3.如果没有定义构造函数,创建对象时,系统会自动提供默认的无入参的构造函数,如果自己定义了构造函数,创建对象时,系统调用的是自己定义的构造函数,而不会用默认的构造函数 4.构造函数无需显示调用(以函数名的方式调用),在创建对象的时候,会自动调用相应的构造函数。 5.构造函数可以重载 6.可以用参数列表对成员变量进行初始化。拷贝(复制)构造函数:
用另外一个对象给当前对象进行初始化,如果用户没有自定义拷贝构造函数,系统会提供默认的拷贝构造函数,如果用户自定义拷贝构造函数,系统将会调用自定义的拷贝构造函数,而不会用默认的拷贝构造函数。 深拷贝构造函数与浅拷贝构造函数: 涉及到堆内存数据之间的拷贝构造,就叫做深拷贝,其他叫做浅拷贝。 定义类的时候,C++默认有: 1.构造函数 2.析构函数 3.拷贝构造函数 4.= 运算符的重载 5.& 运算符的重载限制构造函数:
构造函数定义成非公有的,该类无法定义对象。(因为定义对象的时候会自动调用构造函数,而构造函数是非公有的,在类的外部无法访问,所以无法创建类的对象)(ps之类的说明也很少,以后记得找找写一篇博文) 析构函数: 特殊的成员函数,作用是对象的生命周期结束的时候,析构函数可以回收对象的资源,或者完成清理工作 特点: 1.没有返回值 2.函数名是类名前面加~ 3.没有入参,不能重载析构函数 4.如果没有定义,会提供默认的析构函数,如果定义了,就用自己定义的析构函数 5.能自己调用构造函数,只是在执行析构函数体中的内容。 6.在对象的生命周期结束的时候会自动调用析构函数释放对象的内存。 7.如果对象在栈里面,析构函数和构造函数的执行顺序是相反的(先进后出)。一般情况析构和构造函数的顺序是相反的,特殊情况,需要考虑先释放动态数据区,再释放静态数据区的内存。上面是类在生成对象的一些最基本的函数,再说说最需要的封装:private的成员是在类内可以被操作,类外是不能访问的。只用通过共有函数进行操作,但是操作的时候也会破坏数据安全,那就有了const。除了共有函数,还有友元函数,mutable关键字修饰的变量可以破坏封装。
1.const 修饰成员变量 只能通过初始化列表进行const成员变量的初始化,而且不能在构造函数中对其进行赋值。Demo::Demo(int val): ival(val){} 2.const 修饰成员函数 不能通过该成员函数修改成员变量的值,即使成员变量是非const,说到底就是不能改数据,只能显示数据。 3.const 修饰类的对象(定义 常对象) 该对象的成员函数和成员变量都是只读的,无法修改。且普通成员函数(非构造和析构函数)必须被const修饰,防止在成员函数中修改成员变量。再说一个静态成员static修饰的成员。被该类的对象所共有,不能被初始化列表定义,但是可以直接通过类名::成员名调用。
mutable修饰的变量就算是const 修饰了还可改变。看起来很牛逼。
友元:friend,好盆友就是牛逼,可以动你的东西还不说一声。友元函数,并非类自己的函数,而是别的函数,friend最好少用啊。
————————————————————————————————————————————————
添加委托调用构造函数:
class Teacher{public: // 带参数的构造函数 Teacher(int x) { // 判断参数是否合理,决定赋值与否 if (0 < x && x <= 100) m_nAge = x; else cout<<"错误的年龄参数"<
在构造函数后面加“:”后面跟构造函数,那就是委托调用构造函数;