C++ 基础杂项

1、String 类:

        String是一个类,不同于C语言中的一个字符数组,他初始化的时候只有固定的大小,并没有为字符串分配内存空间,所以需要等到初始化字符之后才会为其分配内存,所以Sting大小只包含了对象的大小没有计算字符串的大小。

       EG:

        string strtemp = "1234567";
cout <<sizeof(strtemp) << " " << strtemp.c_str() <<"  "<< sizeof(strtemp.c_str()) << endl;

       输出结果为: 28    1234567  4

      说明string对象的大小只有28字节,为固定大小,即使初始化了字符串也只有28字节,字符数组的内存是计算在外的;另外string.c_str()大小只是一个指针,大小只有4字节,指向的是字符数组的内存地址;如果作为输出的话则输出指针所指的字符串。

2、类的const或者引用类型的成员变量,初始化的时候只能在构造函数的初始化函数列表里进行初始化,其他的方式都是不行的;

     class  A

{

public:

A(int temp);//构造函数

.....

private:

const int i;

int &j;

}


只能通过

 A::A(int temp):i(temp) , j(temp){}

 的方式进行初始化!!!

3、类的static成员函数只能操作static成员变量;

   原因:static函数没有默认的this指针,而成员数据是对象实例出来的时候分配的,需要对象的this指针才能找到他们,所以没有this指针的static函数

是不能操作非static成员变量的,只能操作static成员变量。

4、类最好应该定义复制构造函数,就是构造函数的参数只有一个且为const对象引用,用这个引用对对象进行构造;(有指针成员的类必须定义,避免出现内存泄漏)

     没有定义复制构造函数的类有很大的局限性,不能作为容器的元素,所以不能作为vector这类的容器的成员,因此以前才会在vector中加标签对象

时定义它的析构函数,这就是在符合类的“三原则”,析构函数、复制构造函数、复制操作符三个必须同时具有。

5、protected相当于public和private的合成:

      private:类的用户不能使用这个类的protected成员;(用户指的是使用函数;比如有两个类,一个类的函数参数为另一个类的对象的引用,则

                                                                                           这个函数不能通过这个引用来使用它的protected成员,即为private特性)

      public:就是类的派生类可以使用基类的protected成员 ;

(后续待补充)

你可能感兴趣的:(C++ 基础杂项)