当前位置:首页 > C++程序设计笔记
常用的string操作 s.size( )、s.length( ) s.empty( ) s.max_size( ) s.capacity( ) s.reserve( ) 返回s中字符的个数 如果s为空串,则返回true,否则返回false 返回字符的可能最大个数 返回重新分配之前的字符容量 保留一定量内存以容纳一定数量的字符 ==、!=、<、<=、>、>=、按字典序比较字符串 s.compare( ) =、s.assign( ) s.erase( ) s1 + s2 +=、s.append( ) s[n]、s.at(n) 字符串赋值 清空字符串 把s1和s2连接成一个新字符串,返回新生成的字符串 在尾部添加字符 存取s中位置为n的字符,位置从0开始计数 find( )、rfind( )、substr( )、 子串查找 find_first_offind_first_not_offind_last_offind_last_not_of s.insert( ) s.replace( ) s.swap( ) >>、getline( ) s.c_str( ) s.data( ) s.begin( )、s.end( ) s.rbegin( )、s.rend( ) s.get_allocator( ) ……
vector的几个常用构造函数 vector
vector的empty( )和size( )函数与string类似,size( )返回vector相应的size_type类型,注意,使用size_type类型时,必须同时包含vector的元素类型: vector::size_type
// 错误
// 正确
vector
定义时,数组长度不可以是变量
在数组定义时,如果没有指定数组元素的初值,则数组元素的初始化规则如下:基本数据类型数组,如果在函数体外定义,则其元素均初始化为0,如果在函数体内定义,则其元素不初始化。
对于嵌套的循环语句,break语句只能跳出当前(本层)循环语句,即从内层循环跳到外层循环,要退出外层循环还要在外层循环中使用break,
continue语句只能用在循环语句的循环体中,表示立即结束本次循环,准备进入下一次循环。
? 对于while和do-while语句,continue语句将使控制转到循环条件的判断;
? 对于for语句,continue语句将使控制转到:先计算表达式3,然后计算表达式2,
并根据表达式2的计算结果来决定是进入下一次循环还是结束循环。 注意:continue语句不能在循环语句之外单独使用,用在嵌套循环语句中时,只对当前循环起作用。
? 可用#undef命令终止宏名的作用域,格式为: #undef 宏名
引用通过在变量名前添加“&”符号来定义,格式如下: 数据类型名 &引用名 = 目标变量名;
传值调用的特点是:编译器将实参复制一个副本给形参,在被调用函数中,形参的改变只影响副本值,而不影响调用函数的实参值。
引用定义时必须初始化
? 函数调用需要保存现场和返回地址,代价是增加时间和空间的开销,影响效率,因
此,对于语句行不多,但又被频繁地调用的函数,为避免函数调用的开销,在C++中引入内联函数。
? 内联函数执行时不发生函数调用,而是由编译器在编译时用内联函数的函数体替换
调用语句,节省了调用开销,但相应地增加了目标代码量。
? 内联函数的定义是在函数定义前加上关键字inline:
inline int sum(int a, int b) { return a + b; }
inline int sum(int a, int b) { }
定义重载函数时要注意以下几点:
? 重载函数的形参必须不同,或者参数个数不同,或者参数数据类型不同。只有这样,
编译器才有可能根据不同的参数去调用不同的重载函数。如上例中,当实参为整数
时,则调用整数求和函数;当实参为实数,则调用实数求和函数;
? 返回值类型不能区分重载。在C++语言中,编译器选择相应的重载函数版本时,函
数返回值类型不起作用,不能根据函数的返回值来区别重载函数,必须依据形式参数区别;
通过函数指针变量调用函数的一般步骤如下:
? 先定义函数指针变量,如int (*p)(int, int);语句,在此形参变量名可省略; ? 把被调用函数的函数名(入口地址)赋给函数指针变量,如程序中p = maxValue;语句;
? 通过函数指针变量调用函数,如程序中max = (*p)(a, b); 语句。
注意:当局部与全局变量同名时,在块内与局部变量同名的全局变量不起作用,即局部变量优先。但在块内可通过作用域运算符“::”来引用与局部变量同名的全局变量。
对于const对象只能调用其const成员函数。
静态全局变量:全局变量定义加上static关键字,就成为静态全局变量 。静态全局变量是
return a + b;
为了使全局变量只限于被本文件使用,而不能被其它文件引用。
静态局部变量属于静态存储类别,在程序开始执行时,为这种变量分配存储空间,当调用结束后,系统并不收回这些变量所占用的存储空间,当再次调用函数时,变量仍使用相同的存储空间,因此,变量仍保留原来的值,即在整个程序运行期间变量都存在;
虽然静态局部变量在函数调用后仍然存在,但其它函数不能引用它,只能由定义它的函数引用。
已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理。定义格式: <类型说明符> <函数名> (<参数表>) const
对于类A,拷贝构造函数是指函数定义如下的构造函数: A::A(const A& obj) { // 拷贝构造函数 }
// …
静态数据成员的初始化不在类的构造函数中进行,而是在类体外单独进行的,一般地,在类的实现文件中直接赋初值。
所谓友元函数,是说它不是类的一个成员函数,却可以直接访问类的private成员。友元函数可以是一个普通的全局函数,也可以是其它类的成员函数。 double fn(clsName obj) {…} double clsTwo::ffn(clsName obj){…} class clsName { public:
…
friend double fn(clsName obj); private: … friend double clsTwo::ffn(clsName obj); };
注意:
? 在类外提供虚函数的实现时,不能再加virtual关键字,否则会编译报错,这点和类
中const成员函数不一样。 ? 如果在类外实现const成员函数,那么定义和实现处都要有const关键字。 ? 而对于虚函数,在基类定义的地方要加virtual关键字,在派生类的定义处可加可不
加virtual关键字,在类外虚函数的实现处不能加virtual关键字。
重载(overload)是指相同作用域内函数之间同名但参数不同的情形。
C++不支持跨域重载,重载只发生在相同的作用域内。在同一个类中,多个参数不同的同名函数构成重载。在基类和派生类间,若成员函数同名而且参数不同,那么派生类成员函数将遮蔽基类同名成员函数,而不是重载。
共分享92篇相关文档