c++小细碎(内容来自多次搜索,拾人牙慧)

① 

友元函数:友元函数一般用在类中,比如在主函数外定义一个函数,如果在一个类中不把其声明为友元函数的话,是不能调用它访问类中的私有成员变量的,而如果定义了,就可以调用类中的私有成员变量。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。

try {//执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 } 

catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 } 

finally {//不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally } 

new int 创建一个int大小的内存,如int* p = new int; new int (100) 创建一个int型的内存,并赋值为100;  int *p = new int(100);  new int[100] 创建100个int型的内存; int* p[] = new int[100];

无法动态申请二维数组,只能申请一段连续的数组空间,如指针数组来模拟二维数组。

删除动态数组用delete [] p;

"return 0"出现可能有两种能,一是在主函数〔main()函数〕中出现,二是在自定义函数中出现,在主函数中出现是代表的是无系统返回值,即执行到这时直接跳出程序了。在自定义函数中出现时代表的是无函数返回值,只执行了代码,做了一些代码让做的事,但不返回数值给主调函数。

strcat() 函数用来连接字符串,其原型为:

char *strcat(char *dest, const char *src);

【参数】dest 为目的字符串指针,src 为源字符串指针。

strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL

注意:dest 与 src 所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串。

【返回值】返回dest 字符串起始地址。

return('0')是返回字符'0',

return(c-'0')是返回表达式c-'0'的值,字符在计算机内是以一个整数值来存储的,都有固定的数值,被解释为字符(显示的时候是显示字符),也可以对char作算术运算,因为char也是一个数值。

return(0)是返回数值0

其实有无括号均可,只要它不影响表达式的优先级,就当是一种风格罢了,()在表达式中多是用来改变表达式中运算符的优先级,因为()在表达式中的优先级很高。

换行符‘\n’和回车符‘\r

顾名思义,换行符就是另起一行,回车符就是回到一行的开头,所以我们平时编写文件的回车符应该确切来说叫做回车换行符  

'\n' 10 换行(newline

'\r' 13 回车(return

也可以表示为'\x0a''\x0d'.(16进制)

windows系统下,回车换行符号是"\r\n".但是在Linux等系统下是没有"\r"符号的。

在解析文本或其他格式的文件内容时,常常要碰到判定回车换行的地方,这个时候就要注意既要判定"\r\n"又要判定"\n"

写程序时可能得到一行,将其进行trim'\r',这样能得到你所需要的string了。

默认构造函数(default constructor)就是在没有显式提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有的形参提供默认实参的构造函数定义。

拷贝构造函数(copy constructor)被用来以一个对象来初始化同类型的另一个对象,拷贝赋值运算符(copy assignment operator)被用来将一个对象中的值拷贝到同类型的另一个对象中:Widget w3 = w2; // invoke copy constructor!

幸运的是,拷贝构造函数很容易从拷贝赋值中区别出来。如果一个新的对象被定义(就象上面那行代码中的 w3),一个构造函数必须被调用;它不可能是一个赋值。如果没有新的对象被定义(就象上面那行 "w1 = w2" 代码中),没有构造函数能被调用,所以它就是一个赋值。

const char*const p;

const char*p;

char*const p;

const vector<int>::iterator iter不可实现++iter,可实现*iter=10

vector<int>::const_iterator iter不可实现*iter=10,可实现++iter

 

在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数,virtual 函数返回类型 函数名(参数表) {函数体;},实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数

定义虚函数的限制:

1)非类的成员函数不能定义为虚函数,类的成员函数中静态成员函数和构造函数也不能定义为虚函数,但可以将析构函数定义为虚函数。实际上,优秀的程序员常常把基类的析构函数定义为虚函数。因为,将基类的析构函数定义为虚函数后,当利用delete删除一个指向派生类定义的对象指针时,系统会调用相应的类的析构函数。而不将析构函数定义为虚函数时,只调用基类的析构函数。

2)只需要在声明函数的类体中使用关键字“virtual”将函数声明为虚函数,而定义函数时不需要使用关键字“virtual”。

3)当将基类中的某一成员函数声明为虚函数后,派生类中的同名函数自动成为虚函数。

4)如果声明了某个成员函数为虚函数,则在该类中不能出现和这个成员函数同名并且返回值、参数个数、类型都相同的非虚函数。在以该类为基类的派生类中,也不能出现这种同名函数。

虚函数联系到多态,多态联系到继承。所以本文中都是在继承层次上做文章。没了继承,什么都没得谈。

---------------------------------------------------------

线程同步的方式主要有:临界区、互斥区、事件、信号量四种方式。

前边讲过了临界区线程同步-----windows核心编程-关键段(临界区)线程同步,这章我来介绍一下互斥器(Mutexes)在线程同步中的使用。

互斥器(Mutexes)的用途和临界区(critical section)的用途非常相似,如:一个时间内只能够有一个线程拥有mutex,就好像同一时间内只能够有一个线程进入同一个critical section一样。但是mutex通过牺牲速度,提高了灵活性,功能变得更加强大了。

 

虽然mutexcritical section做相同的事情,但它们的运作还是有差别的:

1、锁住一个未被拥有的mutex,比锁住一个未被拥有的critical section需要花费几乎100倍的时间。

2mutex可以跨进程使用。critical section则只能在同一个进程中使用。

3、等待一个mutex时,你可以指定“结束等待”的世间长度,但对于critical section则不行。

getline一行行独立读取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值