• C++学习备忘录(一)


    1、rand() 生成随机数  rand()%100+1 ==>生成1-100之间的随机数。

    2、int &a = 10; 报错  可以用 const int &a=10;

    void showValue(const int & val)

    {

        val=100; //error  val 不能修改
    }

    3、函数的占位参数:void func(int a,int) {}   第二个参数就是占位参数。 占位参数也可以有默认值。

    4、函数的重载:同一作用域下, 函数名相同,参数类型不同,参数个数不同,参数顺序不同。 但是如果只是函数的返回类型不同不可以

         当函数引用作为参数传递时, void func(int & a)  和void func(const int  & a) 属于不同的参数类型。、

         函数中使用默认参数,虽然能编译通过,但是调用时会报错,所以要避免。 func(int a,int b=10)  func(int a)   func(10);//调用时报错

     5、类的三种权限:public protected private   默认是private;  struct 默认是public.

    6、类的构造函数可以有参数,但是析构函数不能有参数。

    7、类的拷贝构造函数写法:  必须用常量引用,不能修改传入的类。

    class Person

    {

        Person(const Person &p)

      {
      }
    };

    8、匿名对象 Person(10); 调用完后系统会立马回收。

    9、类的隐式调用构造函数:  Person p=10;  //等价于Person p=Person(10);

    10、构造函数调用规则: 如果提供了有参构造函数,系统不在默认添加无参构造函数,但是会添加拷贝构造函数。

    当提供了拷贝构造函数时,系统不会默认添加其他构造函数。

    11、类外不能访问私有静态成员函数。  private: static void func2();   

    12、静态成员函数的两种访问方式: Person p1;  p1.func2();        Person::func2();

    13、空对象()Person p;  sizeof(p)  =1;   空对象的内存地址是1个字节,编译器为了区分不同的空对象内存地址而分配。

    14、静态成员变量  类内定义,类外初始化。

    15、只有类的非静态成员变量属于类的对象上,非静态成员函数

    16、this指针  指向被调用成员函数所属的对象 :可以解决成员变量重名问题  this->age=age ,  在函数内返回对象本身  return *this;

    this的本质是指针常量,指向的对象不可修改  相当于 Person * const this;  也可以让this指针本身不可修改,  const Person * const this;

    17、常函数:  成员变量不可修改,可以加mutable关键字使之可修改。

    void show() const 

    {

      a=10;// error

      b=10;// ok

    }

    int a;

    mutable b;

    18、常对象:const Person p;  p.a=10;//error   常对象只能调用常函数,不能调用普通成员函数,因为成员函数可以修改成员变量。

    19、友元  访问类的私有成员:  全局函数做友元   friend void goodBoy(Person * p);  

    类做友元  friend class Person;

    类的成员函数做友元; friend void Person::visit();

    20、 虚继承   解决菱形继承:vbptr 指向 vbtable

    21、指针占4个字节。

    22、动态多态  virtual: 父类中有虚函数指针 vfptr 指向vftable(表内记录虚函数的地址)   子类的虚函数表会覆盖父类的虚函数表

    23、抽象类  只要包含纯虚函数就是抽象类 : virtual void func()=0;       子类必须重写抽象类的纯虚函数,否则无法实例化。

    24、虚析构和纯虚析构函数: 相同点是解决父类无法释放子类对象的问题。都需要有具体的函数实现。   不同点是纯虚析构函数是抽象类,不能实例化对象。

    指针的释放:    string * name;   

    ~func()

    {

        delete name;

        name=NULL;

    }

  • 相关阅读:
    InPut 标签 HTML(表单)
    JavaScript Table 对象
    JCBD
    JCBD
    JavaScript prototype 属性
    Java8 新特性
    JavaScript 对象的使用
    Java 反射
    虚拟机VirtualBox启动虚拟机报Only Ethernet Adapter' (VERR_INTNET_FLT_IF_NOT_FOUND).
    Impala 数值函数
  • 原文地址:https://www.cnblogs.com/taofengfeng/p/13696241.html
Copyright © 2020-2023  润新知