第三十七讲 浅出class(3)

      C++里面的string很多人都把他当成了基础类型,认为他如同int,char等等一样都是C++内置的基础类型,其实不然,C++里面的string其实就是一个类,定义在std名称空间中的类,我们使用他都是使用他的对象,不过,我们最好不要忘记这个事实,因为,我们越把他想得简单,其实他就会越简单。为了更加能够理解string的优势,我们先来看看C语言里面的char的优缺点。
优点:
1)char类型的字符串都比较简单,主要是利用了基本的底层字符类型和数组结构。
2)char类型的字符串占用空间小。
3)char类型的字符串更接近于底层结构,对于底层内存复制更容易。
缺点:
1)char类型字符串对内存的要求极为严格,极容易出错,而且挑错时时最恶心的。
2)char类型字符串对程序员的要求严格,要了解字符串的底层表示法,不适合于面向对象。
3)char类型字符串的辅助函数的命名很糟糕,就比如strcut,strcpy,strcmp等等用起来经常会让人不知所措。
C++中,string不但继承了char类型的优点,同时还改善了char的缺点,而且出于兼容性考虑,C++的string里面有一个方法c_str(),能将string对象转换为char字符串。
string不用担心内存的问题,如同我们昨天看到的类(类似)string的类,他会自动管理内存,那么现在我们来谈谈这个类的设计:
1)把所有方法都放在public里,供对象调用。
2)将数据设为private,保护数据的安全。
3)设一个构造函数,一个复制构造函数,一个默认构造函数,提供多种初始化方式。
4)重载操作符”=”,”<“,”>”,”==”,”!=”等操作符,方便对象的赋值,比较。
5)重载iostream输出输入流操作符,实现对象可从键盘输入和标准输出。
从这些天的内容里,我们似乎已经明白了一件事,如果我们的方法是供对象使用,那么就得声明为public,如果想要保护数据,就声明为protected或者private(关于protected和private等接下来深入class章节再来细说,这两种类型都有保护数据的作用)。
如同前些天我们所说的,由于class是一个我们自定义的类型,所以默认情况下是不能够像我们使用基础类型那样实现各种操作符运算,要实现这些功能,我们就要为我们的class实现这些操作符,就好比,如果想要像下面这样写是不行的:
———————————–
My_String str1(“Hello”);


My_String str2(“world”);


cout<<str1+str1;


————————————
我们本来想要输出Helloworld的,但是却bug了,为什么呢?因为我们并没有为我们的Ny_String重载+操作符,所以不能这样写,如果想要这样写的话,我们可以先重载操作符+:
—————————————–
My_String&

operator+(const My_String&

,const My_String&

);


—————————————–
这样一来我们就可以像上面那样写了。我们还可以重载 += 等操作符,这样的话可我们就可以这样写:
————————————–
str1 += str2;


————————————-
如果大家想要通过cout输出,需要同cin来输入的话,我们还得重载操作符<<,>>,这样一来,一个基本可以拿出来用的string就算是完善了。
到现在,大家可能也明白一件事,如果我们的基础不够扎实,想要把这些功能完善却不是一件容易事,尤其如果我们对c语言不够了解,就可能不会明白为什么会在string的实现里面大量的调用char类型的辅助函数。
至此,就算是大家一开始没有class的基础,经过这些天也对class有些了解了,相信大家也能够写出一些简单可用的class出来,所以,接下来我们就该深入研究class。

发表评论