zoukankan      html  css  js  c++  java
  • C++学习笔录1

    1、在实际开发中,引用类型变量值用于函数的参数中。它不会另外开辟空间(提高了程序效率),他相当于变量的别名,代表的就是当前这个变量的地址空间。(引用的底层用的是指针。因此从底层的角度讲,其实它的效率是没有提高的)。
    2、不要定义类似下列的函数:
    void fun(int parameter){};
    void fun(int &parameter){};
    这两个函数符合重载的概念。编译也不会报错,但是当出现如下调用时,程序运行就会出错
    int m = 10;
    fun(m);
    这样调用时,程序不知道你调用的是哪一个函数。
    3、默认参数函数,定义如下:
    void fun(int a = 1);
    在函数声明的时候写,默认参数必须写在所有参数的最后。默认参数的函数要少用。在写程序的时候,有时可能会在调用的时候忘记写参数,这时函数就会使用默认参数,这样程序运行的结果可能就不是预期的结果。
    4、类是保存在代码段的,可以用它来创建对象。创建的对象也没有成员函数,成员函数也是存放在代码段内的。
    5、析构函数不能重载,因为析构函数没有参数,因此无法重载。
    6、问:为什么C不能重载?C++可以重载?
        答:编译到最后所有的函数都没有函数名。只有一个地址供程序调用。C语言在编译的过程中就根据函数名(不管参数)来确定地址。而C++在编译的时候会将参数和函数名一起使用来确定地址。
    7、指向成员函数的指针,即函数指针。其定义方式与C语言的函数指针定义不同。定义方式是:成员函数返回类型 (类名::*指针变量名)(参数列表)。成员函数int stu::show(int x, int y){},为其定义成员函数指针应如下:
    int (stu::*p)(int x, int y) = &stu::show;
    stu stu1;
    (stu1.*p)(1, 2);//通过对象使用成员函数指针调用成员函数。其调用方式是(对象名.*指针变量名称)(实参)
    通过函数指针去调用成员函数也必须使用对象去调用。
    8、常成员变量,在成员变量前面用关键字const修饰。它只能并且必须通过构造函数的初始化表为其初始化,而且必须进行初始化,不初始化会报错,以后都不能再为其赋值。相当于只读变量。所有的构造函数都必须通过初始化表对对常成员变量赋值。只读变量应该用大写。
    9、常成员函数。函数在形参列表前用const修饰。其在声明和定义都必须加上const。在常成员函数中,(1)、一定不能改变成员变量的值。(2)、不能在常成员函数中调用普通函数,但是可以调用其它常成员函数, 但是普通成员函数可以调用常成员函数。(3)、不能修改对象。除此之外,其它的与普通成员函数一样。
    10、常对象。即对象里面的值不能再被更改。它的定义是在定义时加上const修饰。它只能调用常成员函数。(因为常对象的成员变量是不能被更改的,而普通成员函数可能会修改它的值,因此规定常对象只能访问常成员函数)。定义常对象的类的构造函数必须把所有成员变量都初始化。虽然在创建常对象时,不为常对象的成员变量初始化编译器不会报错,但是这样是没有意义的。因为后面就不能再为其赋值了。常对象主要作用就是避免修改不能修改的成员变量。
    11、对象的动态创建。使用new创建的对象存放在堆中。但是在堆中分配空间有可能会失败,因此必须对结果进行判断。也可以使用malloc类函数进行创建对象,但是不会调用构造函数,但是这种方法在开发中不要使用。
    12、对象赋值与对象复制。赋值:有空间,只是把值拷贝过去。如:stu1 = stu2;复制:原本没用空间,而完全“克隆”出另一个对象出来。其语法为:stu::stu1 = stu2;  
    stu stu1(stu2);编译器在处理时,会将第一种情况处理成后面的写法。两种写法等价。都要调用复制构造函数。第一种方法调用了赋值构造函数。对象的赋值与赋值是用于对象的参数和对象返回值。函数传参是属于复制。根据入栈的原理,函数在调用的时候才会为形式参数分配空间。如下:return p;当执行这句时,系统会为返回值找一块内存空间,然后将p的值放进这个内存空间中,然后销毁p的空间。函数调用结束,程序接收到返回值以后,这块内存空间也会被销毁。
    13、复制构造函数。当你没有写赋值构造函数时,编译器会自动加上赋值构造函数。这与构造函数和析构函数相同。编译器根据参数来确认是否是复制构造函数。
    14、默认构造函数有五个。其中包括无参数默认构造函数,复制构造函数
    15、静态成员变量和静态成员函数。静态成员变量与普通成员变量的区别:
    (1)、程序开始运行就会创建静态成员变量。程序结束时才销毁。创建对象时,不会在对象的内存块中出现静态成员变量。
    (2)、所有的对象使用的静态成员变量都是同一个。它是所有对象共享的变量。
    (3)、不随着对象创建而创建,销毁而销毁。
    (4)、静态成员变量也叫类变量,可以通过  类名::静态变量名  来引用它。当然也可以用访问普通成员变量方式去访问它。
    (5)、静态成员变量虽然是共享的,但是却不能在类中赋值,它也必须在类外赋值。建议放在main函数所在的文件中进行赋值,但是不要写在main函数中。(避免重复导入错误)。
    (6)、静态成员方法和静态成员变量的访问方式相同。
    (7)、静态成员函数只是在声明时要用static声明,在实现时不需要用static修饰。
    (8)、静态成员函数中,不能使用this指针。能不能使用this来访问静态成员变量。静态成员函数中若要访问摸个对象的成员,则必须把这个对象以参数的方式传入静态成员函数。
  • 相关阅读:
    VMWare虚拟机非正常关机后无法启动
    curl: (1) Protocol "'https" not supported or disabled in libcurl的解决方法
    spring security入门
    oracle中可以使用drop、delete和truncate三个命令来删除数据库中的表
    com.github.pagehelper:pagehelper:jar:3.4.2-fix.jar
    oracle jdbc驱动 ojdbc14-10.2.0.4.0.jar 网盘下载
    PDF复制SQL语句没有换行符的解决办法
    rpm -qa | grep mysql查询不到MySQL
    新文预览 | IoU-aware Single-stage Object Detector for Accurate Localization
    目标检测 | RetinaNet:Focal Loss for Dense Object Detection
  • 原文地址:https://www.cnblogs.com/zxtp/p/4906401.html
Copyright © 2011-2022 走看看