初涉c++学习笔记

这几天真的太忙了,连博客都忘记写了。

想来已经半个月没有写了。毕业设计真的是应该早点去搞,等到要赶设计的时候,总有力不从心的时候。毕竟一心两用后果自负!本来想把之前学的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<<"错误的年龄参数"<<endl;
}
    private:
    int m_nAge;  
}
// 构造函数Teacher()委托调用构造函数Teacher(int x)
// 这里我们错误地把出生年份当作年龄参数委托调用构造函数
// 直接实现了参数合法性验证并赋值的功能
Teacher() : Teacher(1982)
{
    // 完成特有的创建工作
}
private:
    int m_nAge;   // 年龄
};
C++

在构造函数后面加“:”后面跟构造函数,那就是委托调用构造函数;

posted @ 2017-04-11 15:18  AAAron  阅读(196)  评论(0编辑  收藏  举报