首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C++航海王:追寻罗杰编程之路】C++11(三)

构造函数 析构函数 拷贝构造函数 拷贝赋值重载 取地址重载 const 取地址重载 最后重要是前4个,后两个用处不大。...默认成员函数就是我们不写编译器会生成一个默认。 C++11 新增了两个:移动构造函数和移动赋值运算符重载。...针对移动构造函数和移动赋值运算符重载有一些需要注意点如下: 如果你没有自己实现移动构造函数,且没有实现析构函数 、拷贝构造、拷贝赋值重载任意一个。那么编译器会自动生成一个默认移动构造。...如果你没有自己实现移动赋值重载函数,且没有实现析构函数 、拷贝构造、拷贝赋值重载任意一个,那么编译器会自动生成一个默认移动赋值。...::move(s1); Person s4; s4 = std::move(s2); return 0; } 类成员变量初始 C++11允许在类定义时给成员变量初始缺省值,默认生成构造函数会使用这些缺省值初始

7010

C++ 赋值运算符=重载(浅拷贝、深拷贝)

比如:把一个 int 类型变量赋值给一个 Complex(复数)对象,或把一个 char* 类型字符串赋值给一个字符串对象,此时就需要重载 = 赋值运算符 。...需要注意是:赋值运算符 = 只能重载为成员函数。 ---- — 2 — 举个栗子 下面我们以自定义一个自己字符串类代码例子,讲解赋值运算符重载函数。...MyString 字符串类所需成员函数: 构造函数 / 析构函数 返回 char* 指针函数 赋值运算符重载函数 ?...; 语句实际上是初始语句,而不是赋值语句,因为是初始语句,所以需要调用构造函数进行初始,那么这时就需要有 char* 参数构造函数,由于我们没有定义此构造函数,所以就会编译出错。...赋值运算符重载函数(深拷贝) 复制构造函数(深拷贝) ?

2.1K41
您找到你想要的搜索结果了吗?
是的
没有找到

【C++】C++11——新类功能|default、delete|可变参数模板|emplace

新增加了两个默认成员函数:移动构造函数和移动赋值运算符重载 移动构造函数和移动赋值运算符重载生成: 如果没有自己实现移动构造函数:并且没有实现析构函数、拷贝构造和拷贝赋值重载任意一个,那么编译器就会自动生成一个默认移动构造函数...默认生成移动构造函数,对于内置类型成员会完成值拷贝(浅拷贝),对于自定义类型成员,如果实现了移动构造,就调用移动构造,没有实现就调用拷贝构造 如果没有自己实现移动赋值运算符重载:并且没有实现析构函数...、卡搜被构造、拷贝赋值重载任意一个,那么编译器就会自动生成一个默认移动赋值。...Person s3 = std::move(s1);//右值,移动构造 Person s4; s4 = std::move(s2);//移动赋值 return 0; } ---- 二、类成员变量初始...,插入元素可传入用于构造元素参数包 int main() { std::list> mylist; mylist.push_back(make_pair

19630

【C++干货基地】特殊函数名函数:赋值运算符重载

前面的几个赋值运算符重载比较简单,只是为了完成类是如何比较赋值运算符就是我们这里比较关键赋值运算符重载 主要是赋值,把一个对象赋值给另一个对象 而 拷贝构造函数 主要是,同类型对象创建初始化时调用...2.2 赋值运算符重载行为 赋值运算符重载既然也是六大默认成员函数之一那么肯定也是我们不写自动生成一个默认复制运算符重载 ,那么究竟有什么行为呢?...构造函数和析构函数他们行为都是对内置类型不处理对自动定义类型调用他们析构或者构造函数,而 赋值运算符重载是和 拷贝构造一样行为,我们不写会自定生成一个默认函数,默认赋值运算符重载 以值方式逐字节拷贝...注:内置类型成员变量是直接赋值,而自定义类型成员变量需要调用对应类赋值运算符重载完成赋值。 2.4 有了自动生成赋值重载我们还需要自己写吗?...而我们后置++ 返回是++之前值先使用在++所以需要返回+1之前旧值,故需在实现时需要先将this保存一份,然后给this+1 后置++: 前置++和后置++都是一元运算符,为了让前置++与后置

4300

C++(STL):01---pair容器

二、pair概述 特点: 一个pair保存两个数据,pair是一个用来生成特定类型模板 当创建一个pair时,我们必须提供两个类型名,pair数据成员具有对应类型 C++标准库内部多出用到了pair...和val2类型和数值 三、构造函数、赋值、移动语义 规则: ①定义pair时,不给出值时,使用默认构造函数初始使用圆括号/花括号初始器进行初始 默认构造函数 规则:默认构造函数生成一个pair...例如: class A { public: A(A&); }; int main() { std::pair p; //错误 return 0; } 赋值运算符、移动语义 从C++11...make_pair创建其second元素类型默认为double 这对于使用重载函数或template时,确切类型传递十分重要 std::pair(42, 7.77);std:...例如: std::string s, t;//使用s和t初始一个pair,s和t使用移动语义,表示之后不再使用auto p = std::make_pair(std::move(s), std::move

68620

【C++】侯捷C++面向对象高级编程(下)

---- 迭代器 在运算符上比智能指针需要重载更多运算符,处理更多功能。 有特别功能智能指针。 主要用于遍历容器。...示例——标准库中list迭代器 foo即data 注意与上面智能指针重载运算符对比。 说明: 左边方框中内容等同于右边话蓝线部分。...使用鲫鱼和麻雀构成pair,然后拷贝到到鱼类和鸟类构成pair,这样是可以。反之则不行。 允许或不允许限制条件为: 下方代码中构造函数。...补充:C++ Upcast(向上造型) up-cast为向上构造 down-cast为向下构造 ---- 模板特化(specialization) 全特化 泛反面就是特化 泛(又叫全泛)指的是用时候指定类型...auto ite = find(c.begin(),c.end(),target);// 定义使用时就赋值 错误使用 auto ite;// 编译器不能也无法知道这个ite是什么,无法进行推导

62620

成员函数(构造、析构、拷贝构造、赋值运算符重载)实现

以String类为例实现其成员函数 class String { //友元函数重载运算符 friend ostream& operator<<(ostream &out,String& str);...const型 { length = str.length; m_data = new char[length+1]; strcpy(m_data, str.m_data); } //赋值构造...String& operator=(const String &str) //输入参数为const型 { if (this == &str) //检查自赋值 return *this;.../*如果是双目运算符,只要设置一个参数作为右侧运算量,左侧运算符就是对象this本身 *但是>>或<<左侧运算符是cin或cout而不是对象本身,只能声明为友元了 *如果一定要声明为成员函数,只能声明为...ostream & operator<<(ostream &output) *在运用这个<<运算符时就变为这种形式了:data<<cout;不合符人习惯。

1.1K60

C++使用内置容器实现自定义容器

; //基于set容器来实现MySet自定义容器 //参数1为 里面存数据类型 参数2 用哪种容器来实现,并且默认为set容器 /* * 注: 在模板(template)中使用一个嵌套从属类型名称...{ public: //重命名——便于书写 typedef MySet _MySet; //用基于容器来初始咱们这个MySet容器 MySet(...} //拷贝构造函数-根据传进来容器种类 MySet(const _container* _Left) :c(_Left) { } //重载赋值运算符 _MySet& operator...就是在这个容器中使用另一个容器,当前类容器时模板,要加上前缀typename */ //用核心容器中类型(用set容器中size_type 来当我们这个新容器size_type) typedef...{ //使用sizefilter给另一个sizefilter赋值 c = _Right.c; return (*this); } bool empty()const { //

31410

两万字总结《C++ Primer》要点

::: warning 进行比较运算时候,除非比较对象是bool类型,否则不要使用布尔字面值true,false作为运算对象。 ::: 4.4 赋值运算符 赋值运算符满足右结合律。...(2)拷贝赋值运算符 重载赋值运算符:oprator= 合成拷贝赋值运算符:若一个类未定义自己拷贝赋值运算符,编译器会为它生成一个合成拷贝赋值运算符。...operator--(int); } 14.7 成员访问运算符 operator* operator-> 14.8 函数调用运算符 如果类重载了函数调用运算符,则我们可以像使用函数一样使用该类对象。...如果我们想拷贝(或移动)基类部分,则必须在派生类构造函数初始值列表中显式使用基类拷贝(或移动)构造函数。 ::: 派生类赋值运算符: 派生类赋值运算符必须显式为其基类部分赋值。...(2)模板是标准库基础。 生成特定类或者函数过程称为实例。 (3)术语 类模板模板定义,可从它实例化出特定类。

1.5K30

两万字总结《C++ Primer》要点

::: warning 进行比较运算时候,除非比较对象是bool类型,否则不要使用布尔字面值true,false作为运算对象。 ::: 4.4 赋值运算符 赋值运算符满足右结合律。...(2)拷贝赋值运算符 重载赋值运算符:oprator= 合成拷贝赋值运算符:若一个类未定义自己拷贝赋值运算符,编译器会为它生成一个合成拷贝赋值运算符。...operator--(int); } 14.7 成员访问运算符 operator* operator-> 14.8 函数调用运算符 如果类重载了函数调用运算符,则我们可以像使用函数一样使用该类对象。...如果我们想拷贝(或移动)基类部分,则必须在派生类构造函数初始值列表中显式使用基类拷贝(或移动)构造函数。 ::: 派生类赋值运算符: 派生类赋值运算符必须显式为其基类部分赋值。...(2)模板是标准库基础。 生成特定类或者函数过程称为实例。 (3)术语 类模板模板定义,可从它实例化出特定类。

1.7K20

运算符重载(看完这篇彻底掌握重载问题)

3.默认参数不能和重载运算符一起使用,也就是说,在设计运算符重载成员函数时不能使用默认函数。 4.不能改变运算符操作数个数。...重载赋值运算符 重载“+=”和“-=”运算符 程序中重载运算符“+=”和“-=”与标准数据类型“+=”和“-=”不完全相同。...重载=运算符 赋值运算符=原有含义是将赋值号右边表达式结果复制给赋值号左边变量,通过运算符=重载赋值号右边数据成员函数依次复制给左边对象数据成员中。...num;//出现次数 }; class Assoc { struct Pair *vec;//指向结构体变量指针 int size;//分配总单元个数 int used;//已使用单元个数...运算符new重载一般格式如下: void *类名::operator new(size_t,参数表); 在带有“参数表”时,应注意使用重载new方式。

9.2K20

C++13-STL模板

函数模板 函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数,根据实参类型产生函数特定类型版本。...赋值 //per1.show(); per = per; } 类模板模板作用:建立一个通用类,类中成员数据类型可以不具体制定,用一个虚拟类型来代表。...但是如果数据类型是我们自定义结构体或者类的话,我们需要自定义排序函数,有三种写法: 重载 运算符重载 ()进行升序排列。...通过赋值方式初始std::vector v1 = {1, 2, 3, 4, 5}; // 初始一个包含5个元素vector std::vector v2 =...通过构造函数方式初始std::vector v3(10); // 初始一个包含10个元素vector,每个元素值为0 std::vector v4(5, 2); // 初始一个包含

21620

第 16 章 模板与泛型编程

模板使用类型相关函数或运算符应尽可能少。 为了生成一个实例版本,编译器需要掌握函数模板或类模板成员函数定义。...有时这可能会造成意想不到结果。解决这种问题办法是,使用基于函数参数模板重载,来将实参分别为右值或左值时情况分离开来。...(t2), std::forward(t1) ); } ---- 16.3 重载模板 函数模板可以被另一个模板或一个普通非函数模板重载,与往常一样,名字相同函数,必须具有不同数量或类型参数...一个特例 hash类必须定义: 一个重载调用运算符,它接受一个容器关键字类型对象,返回一个 size_t。...两个类型成员,result_type和 argument_type,分别表示调用运算符返回类型和参数类型。 默认构造函数和拷贝赋值运算符(可以隐式定义)。

1.4K60

C++11-右值引用新类功能可变参数列表

左值引用来解决大部分场景,比如参数引用,返回值引用 右值引用是堆左值引用在一些盲区补充,比如将亡值返回 右值引用引入: 如果一个类中涉及到资源管理,用户必须显式提供拷贝构造、赋值运算符重载以及析构函数...const 取地址重载 注意: 默认成员函数就是我们不写编译器会生成一个默认 C++11 新增了两个:移动构造函数和移动赋值运算符重载 2、移动构造和移动赋值 注意: 如果你没有自己实现移动构造函数...,如果实现了就调用移动构造,没有实现就调用拷贝构造 如果你没有自己实现移动赋值重载函数,且没有实现析构函数 、拷贝构造、拷贝赋值重载任意一个,那么编译器会自动生成一个默认移动赋值 默认生成移动构造函数...C++11新特性可变参数模板能够让您创建可以接受可变参数函数模板和类模板 注:由于可变模版参数比较抽象,使用起来需要一定技巧,比较晦涩,现阶段呢主要掌握一些基础可变参数模板特性 示例:...,在底层直接调用普通构造函数生成对象 示例: int main() { //带有拷贝构造和移动构造String std::list >

81430

Java赋值运算符使用技巧,你Get了吗?

前言  在Java开发中,赋值运算符是一种常用运算符,用于给变量赋值。在实际工作中,我们经常需要对变量进行赋值操作,因此掌握赋值运算符使用技巧是非常重要。  ...本文将对Java赋值运算符进行详细解析,包括其基本语法,应用场景案例,优缺点分析等。希望能够帮助读者更好地掌握Java赋值运算符使用方法。摘要  赋值运算符是一种常用运算符,用于给变量赋值。...然后,使用赋值运算符将 b 值赋给 a。最后,我们使用一系列复合赋值运算符对 a 进行操作,并将结果输出到控制台。   需要注意是,Java中赋值运算符和C++中赋值运算符是不同。...使用赋值运算符可以让Java程序更加简洁、高效,提高代码可读性和可维护性。  然而,赋值运算符不当使用也会导致一些潜在问题。...例如,如果使用复合赋值运算符,可能会导致代码可读性降低;如果使用赋值运算符时,左右操作数类型不一致,可能会导致类型转换错误,从而引发异常。

23551

第 16 章 模板与泛型编程

模板使用类型相关函数或运算符应尽可能少。 为了生成一个实例版本,编译器需要掌握函数模板或类模板成员函数定义。...有时这可能会造成意想不到结果。解决这种问题办法是,使用基于函数参数模板重载,来将实参分别为右值或左值时情况分离开来。...(t2), std::forward(t1) ); } ---- 16.3 重载模板 函数模板可以被另一个模板或一个普通非函数模板重载,与往常一样,名字相同函数,必须具有不同数量或类型参数...一个特例 hash类必须定义: 一个重载调用运算符,它接受一个容器关键字类型对象,返回一个 size_t。...两个类型成员,result_type和 argument_type,分别表示调用运算符返回类型和参数类型。 默认构造函数和拷贝赋值运算符(可以隐式定义)。

1.4K20

《Effective Modren C++》 进阶学习(上)

存在不同类型,auto类型推导不能工作 「小结」 当用auto声明变量使用花括号进行初始,auto推导类型为std::initializer_list。这一点是模板类型无法做到。 3....,int>& p : m) { ... } std::unordered_map key是一个常量,所以std::pair类型不是std::pair而是 std:...int z{0}; // 使用{}初始 另外也常用到一种,=和{}配合初始 int z = {0}; // 使用=和{} 需要注意是=在初始化时,并不是作为赋值运算符,举一个自定义类例子来说明...w2; //是一个赋值运算符,调用operator=函数 括号初始也可以用于为非静态数据成员指定默认初始值。...C++11中实现一个空类,编译器会自动声明六个函数:默认构造函数、析构函数、拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符

16920

【C++】STL 容器 - set 集合容器 ⑥ ( pair 对组简介 | pair 对组元素访问 | set 集合容器 insert 插入结果类型 - pair 对组 )

语言 标准模板库 ( STL , Standard Template Library ) 中 , std::set 集合容器 中 包含一组唯一元素 , 并且元素在容器中是自动排序 ; 默认情况下,std...::set 集合容器 使用 类型中 , 设置 仿函数 排序规则 ; pair 对组 可以将两个值 封装成 一个单元...; std::pair 是 C++ 语言 标准模板库 中一个模板类 , 该类主要作用是 将两个 不同类型 或 相同类型 对象 组合成一个 对组 ; 该 对组 对象 可以作为一个单独元素进行存储和操作...; std::pair 常常在需要使用两个相关联值时非常有用 , 比如在关联容器 , 如 : std::map 和 std::set 中 ; 使用 pair 对组前 , 需要先导入 <utility...对组元素 当需要在 std::set 集合容器 中存储两个相关联值时 , 可以使用 std::pair 对组值 作为 set 集合容器中元素 ; std::pair 对组是一个模板类 , 用于存储两个可能不同类型对象作为一对

18510

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券