• C++ 对象中只存成员变量方法是属于类的(所有方法都一样嘛,也可以理解)。
  • C++ 不会默认清理内存,就是说内存使用完,之前的值不会被清除。所以程序再次使用使用到这块内存的时候,它里面的值是不确定的。不一定是0. 所以这就需要程序员自己去初始化这块内存的值。有的语言会自动帮你做这件事。但C++不会,是因为追求效率。
  • constructor:如果手动写一个init方法去初始化一些东西不是不可以,但是难保自己或其他人在使用过程中忘记init,constructor是编译器自动去调用的
  • destructor:没有参数,而且构造和析构都没有返回值,不需要加类型,比如void。
    class A
    {
        A();  //构造,可以有参数
        ~A();  //析构,不能有参数
    }
    
    A::A()
    {
        //todo
    }
    
    A::~A()
    {
        //todo
    }

     

  • int c[] = {1,2,3,4,5};
    int numOfC = sizeof c / sizeof *c;  // 求c数组元素的个数(c语言知识)

     

  • 在C++中,结构体也可以实现类(把他就认为是类),和类基本相同。唯一差别:如果不写public, private这些访问控制关键字的话,struct  默认  public  。 class  默认  private
    struct X
    {
        int i;
        int  j;
    };
    
    X a[2] = {{2,5}, {4,6}};  //给结构体初始化
    
    struct Y
    {
        int  i;
        int j;
        Y(int a);
    }
    
    Y  b[] = {Y(1), Y(2)};  //不能直接给变量赋值,必须通过构造函数给i和j赋值。如果只有变量,那么就直接给变量赋值,但是有了构造函数(或者只要有其他函数?)就必须通过构造函数赋值。
    Y c[2] = {Y(3)};// 这是错误的,c数组中有两个类(通过结构体实现的),只调用了一个构造函数是不行的,编译器会去找默认的构造函数(default constructor),
    //但是找不到(因为需要的是带参数的构造函数,而默认的构造函数是不能有参数的),所以就会报错。(编译器给出的构造函数后面学习是怎么回事)

    其实啊,想想是这么回事:把2个类存放在数组中,如果类中定义了带参数的构造函数,那么就必须手动调用构造函数去初始化成员变量,因为编译器不可能帮你传参数啊。所以编译器只能调用不带参数的default constructor。

  • default  constructor  : 没有参数的构造函数(自己写在类中的和编译器给出的构造函数(同样不能有参数)(程序中没有写出来)才是default  constructor。有参数的构造函数不是default  constructor。
  • 子类和父类的关系是:子类包含父类(完全包含,包括私有成员,只是不能进行操作,必须通过父类提供的方法才能操作)。父类中的私有成员是子类不能访问的,但是如果父类中提供了方法可以访问或设置私有成员变量,那么子类可以通过这些方法去访问或设置私有成员变量。
    class  A
    {
         private:
               int  i;
         public:
               A():i(5) {}  // initialization  list
              ~A() {//todo  destruct}
               getI() {cout << i << endl;}
         protected:
               setI (int a) {i = a;}
    }
    
    //继承
    class B : public A 
    {
          // todo  business  logic
          public:
               getII() {cout << i << endl;}
    }
    
    void main()
    {
          B b;
          b.getI(); //继承A的方法,使用A的方法访问私有成员变量可以,当然前提是方法是public 或  protected的
          // b.getII();  //通过自己定义的方法去访问私有成员变量i不行
    b.setI(11); //父类中提供的设置i的方法可以使用
    }

    这个就好比提供setter 和 getter 让外部去设置和访问私有成员变量一样。protected  是只让子类去访问和设置私有成员变量。如果父类没有提供getter 和  setter ,那么这个私有成员变量只能自己操作。不论是外部还是子类都无权操作。