新余代网站建设公司,排名网站,校园门户网站建设先进,招牌设计 创意logoC学习笔记函数一般有返回值#xff0c;构造函数有没有返回值#xff1f;有返回值#xff0c;返回一个对象#xff0c;确定所以没写#xff1b;在头文件中#xff0c;防卫式声明#xff0c;#ifndef…#define … #endif;pass by value或者 reference#xff0c;传值是整包…
C学习笔记函数一般有返回值构造函数有没有返回值有返回值返回一个对象确定所以没写在头文件中防卫式声明#ifndef…#define … #endif;pass by value或者 reference传值是整包传递引用的底部就是指针效率更高构造函数一般放在public中能不能放在Private可以设计模式中的singleton就用了这个用法不改变数据的类中函数可以加const什么情况下不能传引用返回值不能返回引用构造函数可以用初始化列表传递者无需知道接收者是以引用形式接收的拷贝赋值函数必须检测是不是自我赋值如果是自我赋值可以提高效率不检测上来就是delete会删除要赋值的元素没法赋值;带指针的class必须有拷贝构造、拷贝赋值、析构函数堆里开辟的内存必须手动删除 delete先调用析构函数再释放内存执行operator delete 源代码是freenew先分配内存再转型然后调用构造函数i是先用临时对象保存原来的对象然后对原对象自增再返回临时对象不能作为左值i是直接对于原对象进行自增然后返回原对象的引用可以作为左值i由于不用生成临时变量且以引用方式返回故没有构造与析构的开销效率更高。所以在使用类等自定义类型的时候应尽量使用i。i是先赋值然后再自增i是先自增后赋值带指针的类需要关注big three 拷贝构造、拷贝赋值和析构函数拷贝构造参数可以加const没改变原来的数据可以加 函数不能加const在new新的东西出来。复合关系下的类构造由内向外调用的是默认构造函数不满足要求需要自己写析构由外向内。继承也是如此;非虚函数non -virtual不希望子类重新定义她;虚函数virtual希望子类重新定义它、且你对他已经默认定义;纯虚函数pure-virtual希望子类重新定义它、且没有默认定义;exlict 90%以上用在构造函数前面在模板中也可能用到变量能且只能定义一次但可以声明多次引用必须初始化引用并非对象只是为一个已经存在的对象所起的另一个名字引用即别名空指针例如int *pnullptr等价于int *p0搞清楚改变的是指针的值还是指针指向对象的值最好的方法是记住赋值永远改变的是等号左侧的对象常量指针必须初始化一旦完成初始化就不能再改变存放在指针中的那个地址不能再改变了。指针的类型要和它所指向的对象类型严格匹配两种特例除外string的初始化一个变量实际上执行的是拷贝初始化如果不使用等号则是直接初始化多余的空语句并非都是无害的例如循环体后的空语句。switch语句最好在后面加一条break语句返回值和引用的区别函数返回值时会产生一个临时变量作为函数返回值的副本而返回引用时不会产生值的副本const总结1、用const 修饰函数的参数2、用const 修饰函数的返回值3、const 成员函数(const的作用说明其不会修改数据成员)const 成员函数的声明看起来怪怪的const 关键字只能放在函数声明的尾部例如 int GetCount(void) const; // const 成员函数关于Const函数的几点规则a. const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数b. const对象的成员是不可修改的,然而const对象通过指针维护的对象却是可以修改的c. const成员函数不可以修改对象的数据,不管对象是否具有const性质.它在编译时,以是否修改成员数据为依据,进行检查e. 然而加上mutable修饰符的数据成员,对于任何情况下通过任何手段都可修改,自然此时的const成员函数是可以修改它的常量指针声名格式const * 类型名 指针名 这根指针不变但是指向的对象可以改变指针常量相同class的各个对象互为友元。auto一般会忽略顶层const底层const会保留如果推断出auto是一个顶层const那么需要明确指出。引用也可以设置成autodecltype处理引用、const和auto处理引用、const的方式不太一样