C++默认的构造函数以及运算符重载关键点
2011-04-08 23:13
267 查看
1、默认情况下编译器为一个类定义那些构造函数?
如果我们没有定义一个类的默认构造函数,编译器就会自动定义一个函数体为空的构造函数。
另外,编译器还可以自动定义operator =()赋值函数,来进行同一类的对象之间的赋值。
还有,经过测试,编译器还会自动添加 复制构造函数
2、一般情况下,我们把二元操作符定义成非成员函数(但可以是友元函数,这要看是否访问类的内部成员),一元操作符定义为成员函数。如果二元运算符被定义成成员函数,虽然可以减少一个参数,但是要求必须是该类的对象在运算符之前,也就是不满足交换律。所以,一般情况下二元操作符定义成非成员函数。
3、有些运算符必须重载为成员函数,有些则必须重载为非成员函数
C++规定,有些运算符(如赋值运算符,下标运算符,函数调用运算符,类型转换函数)必须定义为类的成员函数;有的运算符则不能定义成成员函数(如流的插入“<<”和提取">>"运算符)。
类型转换函数形式:
operator 类型名()
{实现转换的语句}
注意:函数名前面不指定函数类型,函数没有参数。如:
class Complex
{
//...
operator double() {return real;}
//...
private:
float real;
float imag;
};
4、如果重载了operator +()函数,最好也重载operator +=()函数。
(可以参看另一篇实例文章:http://liuguangtao.blog.51cto.com/2801521/537704)
如果我们没有定义一个类的默认构造函数,编译器就会自动定义一个函数体为空的构造函数。
另外,编译器还可以自动定义operator =()赋值函数,来进行同一类的对象之间的赋值。
还有,经过测试,编译器还会自动添加 复制构造函数
2、一般情况下,我们把二元操作符定义成非成员函数(但可以是友元函数,这要看是否访问类的内部成员),一元操作符定义为成员函数。如果二元运算符被定义成成员函数,虽然可以减少一个参数,但是要求必须是该类的对象在运算符之前,也就是不满足交换律。所以,一般情况下二元操作符定义成非成员函数。
3、有些运算符必须重载为成员函数,有些则必须重载为非成员函数
C++规定,有些运算符(如赋值运算符,下标运算符,函数调用运算符,类型转换函数)必须定义为类的成员函数;有的运算符则不能定义成成员函数(如流的插入“<<”和提取">>"运算符)。
类型转换函数形式:
operator 类型名()
{实现转换的语句}
注意:函数名前面不指定函数类型,函数没有参数。如:
class Complex
{
//...
operator double() {return real;}
//...
private:
float real;
float imag;
};
4、如果重载了operator +()函数,最好也重载operator +=()函数。
(可以参看另一篇实例文章:http://liuguangtao.blog.51cto.com/2801521/537704)
相关文章推荐
- C++默认的构造函数以及运算符重载关键点
- c++默认的构造函数或其他函数,以及这个函数的使用或者不使用
- 【c/c++】构造函数的默认参数以及缺省参数值
- c++实现单链表(构造函数 拷贝函数 前插 后插 运算符重载 冒泡排序以及逆置)
- C/C++ Notes: #define和#typedef的区别以及构造函数和析构函数
- 私有构造函数以及C++单例模型
- [祥:]C++定义对象的时候调用默认的构造函数,各种形式
- VS2013 C++项目 没有默认的构造函数问题:
- [C++]类成员冒号初始化以及构造函数内赋值
- C/C++ Notes: #define和#typedef的区别以及构造函数和析构函数
- C++(1)C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
- C++中默认构造函数的生成(哪些情况会产生默认构造函数)
- c++中六种构造函数的实现以及9中情况下,构造函数的调用过程
- 从汇编看c++中默认构造函数的使用分析
- 【c++】类和对象--四个默认成员函数+运算符重载
- c++中构造函数初始化的方法以及主要区别
- C/C++ Notes: #define和#typedef的区别以及构造函数和析构函数
- C++中默认构造函数的生成(哪些情况会产生默认构造函数)
- c++中六种构造函数的实现以及9中情况下,构造函数的调用过程
- C++对象初始化以及运算符重载