C++7.19

c++里关于cerr,clog,cout三者的区别:
cerr(无缓冲标准错误)-----没有缓冲,发送给它的内容立即被输出
clog(缓冲标准错误)--------有缓冲,缓冲区满时输出
cout-------------------------标准输出
三个都是ostream类定义的输出流对象,
cout是在终端显示器输出,cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl,不论缓冲区是否漫了,都立即输出流中所有数据,然后插入一个换行符.
cerr流对象是标准错误流,指定为和显示器关联,和cout作用差不多,有点不同就是cout
通常是传到显示器输出,但可以被重定向输出到文件,而cerr流中的信息只能在显示器输出.
clog流也是标准错误流,作用和cerr一样,区别在于cerr不经过缓冲区,直接向显示器输出信息,而clog中的信息存放在缓冲区,缓冲区满或者遇到endl时才输出.  

命名空间:编译器将同名但不在同一个名字空间中的类分开。

静态方法static的意思是没有实例化也可以调用的方法,它在类声明使就已经存在于内存中,static类型的函数在编译时就已经存在与内存中,所以即使没有实例,函数fun依然可以运行。

名字空间支持增补操作而不会产生重定义错误;

数据的安全性就是不希望被别人改动的数据,程序员在设计类时不会把它们暴露给用户。随着学习的进行,类中的很多数据是关乎着类的实现的,也就是说,这些数据的改动很可能使已经定义好的类不能正常地工作,这些数据程序员可以用关键字private保护起来,这样,用户可以使用的数据均为被程序员认可的数据。即使改动这些数据,类依然可以正常运行。

当程序用到指针时,初始化问题更加重要。在使用指针前一定要对其进行初始化,否则指针指向的存储空间是不定的。而直接对这个指针进行操作是危险的,因为它所指向的存储空间不定,而这个存储空间很可能存放着系统运行的关键数据。

C++的一个优点是它强制用户对变量进行初始化,这里的变量指的是用户自定义的变量,即用户自定义的类,类的初始化便由构造函数完成。实际上,初始化是这样的重要,以至于当程序员忘记了为某个类编写构造函数式,编译器会自动为这个类指定一个构造函数,该构造函数被称为默认 构造函数。

构造函数的实现可以在类体内进行,也可以在类体外进行,其形式可以与普通函数相同。构造函数的定义有两种方式:

Animal::Animal(){
age=1;
minEnergyLevel=5;
maxEnergyLevel=30;
position[0]=0;
position[1]=0;
}
//或者采用如下形式
Animal::Animal():age(1),minEnergyLevel=(5)maxEnergyLevel(30);

与构造函数类似,每个对象在被销毁时编译器将会调用一个被称为析构函数的函数对对象进行销毁。

C++中每个变量是由作用域范围的,对象也不例外。在{}外后面的对象将会被销毁。

另外一个有趣的现象时,当程序中新创建了一个类的对象后再用goto语句直接将程序流程转向作用域外,这样做也将调用析构函数将对象销毁。编译器对析构函数的调用时十分严格的。一旦编译器检测到对象超出作用域范围,无论是以什么形式超出,编译器都将调用析构函数。

构造函数的一个应用技巧是,它提供了一种方法使得某些函数可以在主函数调用前被调用。产生这种结果的原因是C++对对象初始化是如此的强调,以至于当对象在main函数外定义时(此时的对象是全局对象),编译器将在调用main函数前调用全局对象的构造函数。

使用new运算符不仅能为系统内已经定义的数据类型分配存储空间,还能够为用户自定义的数据类型分配存储空间,这厚一点在程序设计时是很有用处的,程序运行时常常产生数目不定的对象,用户很可能需要动态的分配内存空间。

new语句只需将变量声明为指向用户自定义类型的指针,再用new语句分配内存就可以了。例如:

Animal *a=new Animal("cat");

使用new语句也可以建立存储对象的数组。这个数组大小也将由程序或用户根据程序的运行情况自行控制。

int main(){
int num;
cin>>num;
Animal *a=new Animal[n];
return 0;
}

 C语言中与malloc语句相对应的语句为free,它用来释放malloc分配的内存,类似的,C++中与运算符new相对应的运算符是delete,它用来释放由new语句分配的内存。

类也有所谓的“朋友”,这里的朋友是指可以访问类中私有成员的方法或类。这些方法或类存在于类的外部,并不是类本身的成员。这样的方法或类叫做友元。

友元函数的引入在一定程度上破坏了类的封装性,从而使C++不是严格意义上的面向对象编程语言,有人因此称C++为“基于对象的程序设计语言”。C++标准委员会允许程序员们使用友元函数的意义是友元函数的引入将极大的提高代码的可读性,缩短代码的开发时间,为高效率的程序开发奠定基础。由此可见,友元函数在带来一定瑕疵的同时,还会带来比瑕疵多的多的方便。

拷贝构造函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值