C++的一些知识

1.对于一个空类,例如

class EmptyClass{};  

虽然你没有声明任何函数,但是编译器会自动为你提供上面这四个方法。

class EmptyClass {  
public:  
    EmptyClass();                        //  默认构造函数  
    EmptyClass(const EmptyClass &rhs);    //  复制构造函数  
    ~EmptyClass();                       // 析构函数  
    EmptyClass& operator=(const EmptyClass &rhs);    //  赋值运算符  
}  

2.为什么赋值运算符要返回引用?

#include<iostream.h>
#include<string.h>
class string{
char *ptr;
public:
 string(char *s)
 {
 ptr=new char[strlen(s)+1];
 strcpy(ptr,s);
 }
 ~string(){
 delete ptr;
 }
 void print(){
  cout<<ptr<<endl;
 }
string operator=(const string &);
};
string string::operator=(const string &s)
{
if(this==&s) return *this;
delete ptr;
ptr=new char[strlen(s.ptr)+1];
strcpy(ptr,s.ptr);
return *this;
}
void main()
{
string p1=("book");
{
string p2("pen");
p2=p1;
cout<<"p2";
p2.print();
}
cout<<"p1:";
p1.print();
}

这样的话在vc6.0环境下会出错。
原因是上面的程序没有用引用作为返回值时,return *this后马上就调用拷贝构造函数。但是由于没有定义就会调用默认的拷贝构造函数。我们知道调用默认的拷贝构造函数时当在类中有指针时就会出错(浅拷贝)。所以如果你不用引用做返回是就必须定义自定义的拷贝构造函数.
3.C++提供的预定义操纵符
1)dec 以十进制形式输入或输出整形数,可用于输入或输出
2)hex 以十六进制形式输入或输出整形数,可用于输入或输出
3)oct 以八进制形式输入或输出整形数,可用于输入或输出
4)ws 用于在输入时跳过开头的空白符,仅用于输入。
5)endl 插入一个换行符并刷新输出流,仅用于输出。
6)ends 插入一个空字符,通常用来结束一个字符串,仅用于输出。
7)flush 刷新一个输出流,仅用于输出。
8)setbase(int n) 把转换基数设置为n(n的取值为0,8,10,或16),n的默认值为0,即以十进制形式输出。
9)resetiosflags(long f) 关闭由参数f指定的格式标志,可用于输入或输出。
10)setiosflags(long f)设置右参数f指定的格式标志,可用于输入或输出。
11)setfill(int c) 设置c为填充字符,默认时为空格,可用于输入或输出。
12)setprecision(int n)设置数据小数部分的位数,可用于输入或输出。
13)setw(int n) 设置域宽为n,可用于输入或输出。
参考:
http://wenku.baidu.com/link?url=33exwQPiY2wJl8M2NCRXY92nGQMlqd-jsvOTDqsYeBoXPphTm2goBSRzgWnNrKasLSbWRA1zG450THJHkOx6m9Hy9n71iyDPl6cv2D681JW###

4.流对象
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值