C++语法概括[2]
12.运算符重载: &nbs12.运算符重载:
operator 函数用法:(不能有下列字符:'::','.','*','->','? :') p;
1.一般:int class_name::operator <运算符> (形参列表) (例92)
2.增量减量运算符: (例93,94,95,96)
a.将一个增量运算符重载为前置的成员函数: 12.运算符重载: &nbs
int class_name::operator++();
b.将一个增量运算符重载为后置的成员函数:
int class name::operator++(int); 12.运算符重载: &nbs
c.将一个增量运算符重载为前置的友元函数:
int operator ++(class_name&);
d.将一个增量运算符重载为前置的友元函数: )
int operator ++(class_name&,int);
e.下标运算符:
int class_name::operator[](形参) //只能是非静态成员函数 operator 函数用法:(不能有下
f.函数调用运算符:
int class_name::operator()(形参表)//只能是非静态函数,且不可以带有缺省的参数
g.成员选择运算符: 12.运算符重载: &nbs
class_name $/* class_name::operator->();
h.new delete运算符:
void *class_name::operator new(siz_t,<arg_list>); 12.运算符重载: &nbs
void *class_name::operator delete(void *,<size_t>);
new delete只能被重载为类的成员函数,不能是友元。而且无论是否使用关键字static
进行修饰,重载了的new和delete均为类的表态成员函数。 p;
对于typedef unsigned size_t;
在头文件alloc.h,mem.h,stddef.h,stdio.h,stdlib.h均说明;
i.友元函数: operator 函数用法:(不能有下
可以是一个类的非静态函数,也可以是类的友元函数。
{friend complex operator+(complex&,complex&);
}; 12.运算符重载: &nbs
以下五种运算符不说明成友元运算符:
"=","()","[]","->","type";
j.转换函数: operator 函数用法:(不能有下
class_name::operator type(); //type 是任何一个合法的C++的类型名(包括基本数据类型和导出数据类型)以及由关键字const和volatile引出的表达示。)
//不带任何参数,也无返回值类型,总是返回type的值。只能是类的成员函数,不能说明为友元运算符。
k.类的赋值运算与运算符重载: 列字符:::,.,*,->,? :
person & person::operator=(person &p)
{dele Name;
Name=new char[strlen(p.Name)+1]; 12.运算符重载: &nbs
strcpy(Name,p.Name);
Age=p.Age;
Sex=p.Sex; p;
return *this;
}
典型例题。当用系统自带对象赋值的函数,如果对象里有如 *Name 型的,则赋值后会使两个指针同时指向一个成员元素的地址,当调用析构函数释放时,会释放两次,多释放一次,而产生错误,这个典型例题是用于把一个成员元素复制到另一个对象中,不是单纯移动指针,当调用析构函数时,会释放两次。 12.运算符重载: &nbs
l.重载函数:系统仅对形参加以区别。
13.虚函数
一般情况下,指向一个对象的指针,不允许指向另一个对象,但指向基类对象的指针可以指向它的派生类,并可以访问派生类中原基类成员。 12.运算符重载: &nbs
如果一个函数一旦说明为虚函数,则无论说明它的类被继承了多少层,在每一层中该函数都保持该virturl特性。且可以在派生类中对该函数省略virtual.
虚函数必须是类的一个成员函数,不能是友元,但它可以是另一个类的友元。虚函数不能是一个静态成员。
设定绑定方式,使程序具有灵活性,但执行效率低,占用内存多. operator 函数用法:(不能有下
14.抽象类:纯虚函数
纯虚函数的一般形式为:virturl 类型名(参数表)=0;抽象类不能申请对象。
15.类属结构: 12.运算符重载: &nbs
1.函数模板:template <class 模板形参表>
返回值类型 函数名(模板函数形参表)
{ )
函数体;
}
example: p;
template <class T>
void swap(T &.x,T&.y)
{T t; 列字符:::,.,*,->,? :
t=x;x=y;y=t;
}
2.重载函数模板:调用用次序: 12.运算符重载: &nbs
1)寻找一个完全匹配的函数,找到,调用之。
2)寻找一个函数模板,将其实例化产生一个匹配的模板函数,找到,调用之。
3)寻找重载函数中有无通过类型转换后产生参数匹配的函数,若有,调用之。 p;
3.类模板:template <class 模板形参>
class 类模板名
{ 12.运算符重载: &nbs
类体;
}
example: tempplate <class T> 12.运算符重载: &nbs
class stack
{private:
T *date; 12.运算符重载: &nbs
int top;
public:
isempty(); 12.运算符重载: &nbs
}
template <class T>
{...} operator 函数用法:(不能有下
16.类模板的友元:
a.一般的类模板友元函数。
b.封闭型的类模板友元函数。当用类型参数将类模板实例化为某个具体的模板类时,该类模板所包含的友元函数也将随之实例化。 列字符:::,.,*,->,? :
c.开放型的类模板友元函数。
例一百二十一。
17.C++的I/O流库 operator 函数用法:(不能有下
1. I/O标准流类
-----------------------------------------
c++名字 | 设备 | C中的名字 | 默认的含义 )
-----------------------------------------
cin | 键盘 | stdin | 标准输入
----------------------------------------- 12.运算符重载: &nbs
cout | 屏幕 | stdout | 标准输出
-----------------------------------------
cerr | 屏幕 | stderr | 标准错误 )
-----------------------------------------
clog | 打印机 | stdprn | 打印机
----------------------------------------- p;
2。键盘输入
cin>>a>>b>>c; //Ctrl+z终止
cin.get(char &ch)//从输入流获取一个字符,不忽略空格Ctrl+z终止 )
cout.put(ch)//输出一个字符
EOF//其值为-1,相当于终止符
cin.geline(char *buf,int limit,Deline='\n')//buf为一个指针或数组,limit为字符个数,Deline为读取字符指定结束符。作用:从键盘读入一串字符。结束用Ctrl+z. 列字符:::,.,*,->,? :
cin.gcount()//返回getline()刚刚读过的字符个数
cin.read(char *buf,int size)//读入指定数目的字符
cout.write(const char *str,int n)//cout.write("string",strlen("string");则输出全部字符。 p;
cin.peek()//返回输入流的下一个字符,但是不提取它。
long(a)//a可以是指针地址,作用,强制转换为十进制数。
(void*)//ex:char str="abcde";cout<<str;将str为首地址字符串的首地址输出。 列字符:::,.,*,->,? :
18.输入符,提取符重载:<< >>
例154 155例题
operator 函数用法:(不能有下列字符:'::','.','*','->','? :') p;
1.一般:int class_name::operator <运算符> (形参列表) (例92)
2.增量减量运算符: (例93,94,95,96)
a.将一个增量运算符重载为前置的成员函数: 12.运算符重载: &nbs
int class_name::operator++();
b.将一个增量运算符重载为后置的成员函数:
int class name::operator++(int); 12.运算符重载: &nbs
c.将一个增量运算符重载为前置的友元函数:
int operator ++(class_name&);
d.将一个增量运算符重载为前置的友元函数: )
int operator ++(class_name&,int);
e.下标运算符:
int class_name::operator[](形参) //只能是非静态成员函数 operator 函数用法:(不能有下
f.函数调用运算符:
int class_name::operator()(形参表)//只能是非静态函数,且不可以带有缺省的参数
g.成员选择运算符: 12.运算符重载: &nbs
class_name $/* class_name::operator->();
h.new delete运算符:
void *class_name::operator new(siz_t,<arg_list>); 12.运算符重载: &nbs
void *class_name::operator delete(void *,<size_t>);
new delete只能被重载为类的成员函数,不能是友元。而且无论是否使用关键字static
进行修饰,重载了的new和delete均为类的表态成员函数。 p;
对于typedef unsigned size_t;
在头文件alloc.h,mem.h,stddef.h,stdio.h,stdlib.h均说明;
i.友元函数: operator 函数用法:(不能有下
可以是一个类的非静态函数,也可以是类的友元函数。
{friend complex operator+(complex&,complex&);
}; 12.运算符重载: &nbs
以下五种运算符不说明成友元运算符:
"=","()","[]","->","type";
j.转换函数: operator 函数用法:(不能有下
class_name::operator type(); //type 是任何一个合法的C++的类型名(包括基本数据类型和导出数据类型)以及由关键字const和volatile引出的表达示。)
//不带任何参数,也无返回值类型,总是返回type的值。只能是类的成员函数,不能说明为友元运算符。
k.类的赋值运算与运算符重载: 列字符:::,.,*,->,? :
person & person::operator=(person &p)
{dele Name;
Name=new char[strlen(p.Name)+1]; 12.运算符重载: &nbs
strcpy(Name,p.Name);
Age=p.Age;
Sex=p.Sex; p;
return *this;
}
典型例题。当用系统自带对象赋值的函数,如果对象里有如 *Name 型的,则赋值后会使两个指针同时指向一个成员元素的地址,当调用析构函数释放时,会释放两次,多释放一次,而产生错误,这个典型例题是用于把一个成员元素复制到另一个对象中,不是单纯移动指针,当调用析构函数时,会释放两次。 12.运算符重载: &nbs
l.重载函数:系统仅对形参加以区别。
13.虚函数
一般情况下,指向一个对象的指针,不允许指向另一个对象,但指向基类对象的指针可以指向它的派生类,并可以访问派生类中原基类成员。 12.运算符重载: &nbs
如果一个函数一旦说明为虚函数,则无论说明它的类被继承了多少层,在每一层中该函数都保持该virturl特性。且可以在派生类中对该函数省略virtual.
虚函数必须是类的一个成员函数,不能是友元,但它可以是另一个类的友元。虚函数不能是一个静态成员。
设定绑定方式,使程序具有灵活性,但执行效率低,占用内存多. operator 函数用法:(不能有下
14.抽象类:纯虚函数
纯虚函数的一般形式为:virturl 类型名(参数表)=0;抽象类不能申请对象。
15.类属结构: 12.运算符重载: &nbs
1.函数模板:template <class 模板形参表>
返回值类型 函数名(模板函数形参表)
{ )
函数体;
}
example: p;
template <class T>
void swap(T &.x,T&.y)
{T t; 列字符:::,.,*,->,? :
t=x;x=y;y=t;
}
2.重载函数模板:调用用次序: 12.运算符重载: &nbs
1)寻找一个完全匹配的函数,找到,调用之。
2)寻找一个函数模板,将其实例化产生一个匹配的模板函数,找到,调用之。
3)寻找重载函数中有无通过类型转换后产生参数匹配的函数,若有,调用之。 p;
3.类模板:template <class 模板形参>
class 类模板名
{ 12.运算符重载: &nbs
类体;
}
example: tempplate <class T> 12.运算符重载: &nbs
class stack
{private:
T *date; 12.运算符重载: &nbs
int top;
public:
isempty(); 12.运算符重载: &nbs
}
template <class T>
{...} operator 函数用法:(不能有下
16.类模板的友元:
a.一般的类模板友元函数。
b.封闭型的类模板友元函数。当用类型参数将类模板实例化为某个具体的模板类时,该类模板所包含的友元函数也将随之实例化。 列字符:::,.,*,->,? :
c.开放型的类模板友元函数。
例一百二十一。
17.C++的I/O流库 operator 函数用法:(不能有下
1. I/O标准流类
-----------------------------------------
c++名字 | 设备 | C中的名字 | 默认的含义 )
-----------------------------------------
cin | 键盘 | stdin | 标准输入
----------------------------------------- 12.运算符重载: &nbs
cout | 屏幕 | stdout | 标准输出
-----------------------------------------
cerr | 屏幕 | stderr | 标准错误 )
-----------------------------------------
clog | 打印机 | stdprn | 打印机
----------------------------------------- p;
2。键盘输入
cin>>a>>b>>c; //Ctrl+z终止
cin.get(char &ch)//从输入流获取一个字符,不忽略空格Ctrl+z终止 )
cout.put(ch)//输出一个字符
EOF//其值为-1,相当于终止符
cin.geline(char *buf,int limit,Deline='\n')//buf为一个指针或数组,limit为字符个数,Deline为读取字符指定结束符。作用:从键盘读入一串字符。结束用Ctrl+z. 列字符:::,.,*,->,? :
cin.gcount()//返回getline()刚刚读过的字符个数
cin.read(char *buf,int size)//读入指定数目的字符
cout.write(const char *str,int n)//cout.write("string",strlen("string");则输出全部字符。 p;
cin.peek()//返回输入流的下一个字符,但是不提取它。
long(a)//a可以是指针地址,作用,强制转换为十进制数。
(void*)//ex:char str="abcde";cout<<str;将str为首地址字符串的首地址输出。 列字符:::,.,*,->,? :
18.输入符,提取符重载:<< >>
例154 155例题