~符号用法
用于析构函数之前,与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往做“清理善后”的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
在C++中,析构函数必须与类名相同,只是在其前面加个~符号,析构函数不带任何参数也没有返回值(包括void型)。如果自己没有定义析构函数则系统会自动生成一个缺省的析构函数,它也不进行任何操作,因此一些简单的类中没有显示析构函数。
标准库String
头文件为#include<string>
主要是字符串的相关类
初始化方式:
- String s1 默认构造函数,s1为空字符串
- String s2(s1) 将s2初始化为s1的一个副本
- String s3("value") 将s3初始化为字符串的副本
- String s4(n,'c') 将字符串初始化为字符c的n个副本
String的相关操作:
- s.empty() 如果字符串为空,返回true,否则返回false
- s.size() 返回字符串中字符的个数
- s[n] 返回字符串中的第n个字符,下标从0开始
- s1+s2 将s1与s2连接成为一个新的字符串,返回新生成的字符串
- s1=s2 将s1的内容替换为s2的内容
- v1==v2 比较v1和v2的内容,相等则返回true,否则返回false
!=,<,<=,>,>= 保持这些操作符惯有的含义
1 #include <iostream> 2 #include <string> 4 using namespace::std; 5 6 7 int main() 8 { 9 string a("c++"); 10 string b(a); 11 string c(4,'a'); 12 cout<<a<<endl; 13 cout<<b<<endl; 14 cout<<c<<endl; 15 16 string d("c++"); 17 if(d.empty()) 18 { 19 cout<<"string d is empty"<<endl; 20 } 21 else{ 22 23 cout<<"string d size is "<<d.size()<<endl; 24 } 25 26 string e = a+c; 27 cout<<e<<endl; 28 return 0; 29 30 } 输出结果: c++ c++ aaaa string d size is 3 c++aaaa
对比C中字符串的一些操作函数
字符串复制函数:strcpy,memcpy(strcpy只能复制字符串,memcpy复制任意)
对比两字符串是否相等:strcmp
两字符串连接函数:strcat
Static类成员
静态类型成员是在类外进行分配空间和初始化的
声明静态类型成员,则该类型成员被该类所共有