C++ 基础杂项

本文介绍了C++中的String类,包括其内存分配特点以及sizeof运算符的结果。此外,讨论了类中const和引用类型成员变量的初始化方式,强调了必须在构造函数初始化列表中完成。还提到了static成员函数只能操作static成员变量的原因,并提醒开发者类应定义复制构造函数以避免内存泄漏问题。最后,解释了protected访问修饰符的作用,指出它在继承中的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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成员 ;

(后续待补充)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值