c++运算符重载以及一些基本概念
来源:互联网 发布:在线客服源码下载 编辑:程序博客网 时间:2024/06/04 23:54
c++primer第四版435
1.赋值( = ), 下标( [ ] ) ,调用 ( ( ) ), 成员访问箭头 (->)等操作符必须定义为成员,定义为非成员时,编译器报错
2. 像赋值一样,符合赋值操作符通常应定义为类的成员,但是定义为非成员的复合赋值操作符时不会出现编译错误
3.改变对象状态或给定类型紧密联系的其他一些操作符,如自增,自减和解引用,通常应定义为类的成员
4.对称操作,如算术操作符,相等操作符,关系操作符和位操作符,最好定义为普通的非成员函数
不能重载的操作符:
:: .* . ? :
基本注意问题:
1.成员变量的初始化顺序只与在声明时的顺序一样,和初始化列表中的顺序无关
2.必须在初始化列表中初始化的情况: 没有默认构造函数的类类型的成员
const类型成员 和 引用类型的成员变量
-->const 类型成员会调用拷贝构造函数 而引用类型不会调用拷贝构造函数
class B;
class A{
friend class B;
public:
A()
{
a_ = 0;
cout << "A()" << endl;
}
A(int a):a_(a)
{
cout << "A(int)" << endl;
}
A(const A &s)
{
a_ = s.a_;
cout << "A &" << endl;
}
private:
int a_;
};
class B : public A
{
public:
B(A &a2, A &a3)
:a2_(a2),
a3_(a3)
{
}
void prin()
{
cout << a2_.a_ << " " << endl;
}
private:
// A a1_;
A &a2_;
const A a3_;
};
int main(int argc, const char *argv[])
{
A a1(4), a2(5), a3(6); //--> A(int) A(int) A(int)
B b(a2, a3);
b.prin();
return 0;
}
-->友元类,能访问到A类的私有成员
3.c++的两种初始化方式:1.直接初始化:调用构造函数
2.复制初始化:使用=号操作符,会调用到拷贝构造函数
4.当函数形参或者返回值为类类型时,将由复制构造函数进行复制
A a1;
fun(A ); --->调用fun(a)会调用拷贝构造函数,当然最后也会调用析构函数的
5.拷贝构造函数为引用的原因:防止无限调用拷贝构造函数下去,拷贝构造函数传形参值时会调用类型的拷贝构造函数,这样无穷下去
6.深拷贝 浅拷贝 :浅拷贝:对数据成员进行简单的赋值 深拷贝:对于对象中的动态成员,不能简单的赋值,而应该重新动态分配空间
7.空间 C++对象:先调用基类构造函数,在初始化列表上成员,再调用自己的构造函数 -->析构的时候反过来
8. 重载 覆盖 隐藏的概念
9. 转换构造函数和类型 转换函数的区别, 类型转换函数注意的几点:1.成员函数, 2.不能指定返回类型, 3.不能有参数 -->operator int() -->函数里面要return 一个相同类型的出来
10.多态性:静态多态性(重载(操作符, 函数)) 动态多态性:虚函数
11.:使用指针访问非虚函数:访问指针的类型的,
使用指针访问虚函数时:访问指针所指对象的类型
---> 引用也是类似的,不过引用一经声明不能改变了
12.触发动态绑定的条件:1.虚函数才能执行动态绑定 2.必须通过基类类型的指针或者引用进行函数调用
13.构造函数不能为虚函数:虚函数实在不同类型的对象产生不同的动作,现在对象还没产生,没有虚函数指针,访问不到虚函数。
13.动态运行时类型识别(RTTI):typeid 返回指针或者引用所指对象的实际类型
dynamic_cast 将基类的指针或引用安全的转换成派生类型的指针或引用
14.显式转换:reinterpret_cast 强制类型转换-- >类似于c的类型转换
const_cast 转换掉const属性或者加上const属性
static_cast 隐式类型转换,可以自动转换的
dynamic_cast 主要用于有虚函数的下行转换
0 0
- c++运算符重载以及一些基本概念
- C++-运算符重载
- [C++]重载运算符
- C#:运算符重载
- c++-++运算符重载
- C++:重载运算符
- 运算符重载(C++)
- [c++]运算符重载
- 【C++】运算符重载
- C++--------------------------------------------运算符重载
- C#:运算符重载
- C++:运算符重载
- C++:运算符重载
- C#:运算符重载
- [C++]运算符重载
- 【c++】运算符重载
- C++:运算符重载
- C#:运算符重载
- 三分钟学会刻录光盘
- 在odl中如何实现rpc
- Selenium Webdriver java 积累一
- Weka算法Clusterers-Xmeans源码分析(二)
- HTML DOM backgroundPositionY 属性
- c++运算符重载以及一些基本概念
- MIT的C指针练习代码
- 指针 引用 对比
- 计算机自考总纲
- Selenium Webdriver java 积累 二
- ACdream1154(lowbit的理解)
- cocos2dx 2.0系列 到 3.0系列的一些转换
- C#自定义事件
- 怎样将在网上看到的视频下到电脑上