vector中存放自定义类 ,对类的要求
来源:互联网 发布:.cx域名投资 编辑:程序博客网 时间:2024/06/07 00:36
vector中存放自定义类的前提是:
自定义的类必须有默认构造函数。因为vector会调用默认构造函数来初始化元素的对象。
那必须要明确:编译器什么时候隐式声明默认构造函数?
有两个条件:
· 该类没有显式声明任何构造函数。--既然你都定义了,系统就不给你生成了。
· 数据成员中没有const和reference。--因为要初始化。
满足则隐式生成默认构造函数。这里强调“任何”,是指即使用户自定义了复制构造函数或一个需要多个参数的构造函数,默认构造函数也不会被隐式声明了。在定义一个类时要保证有默认的构造函数。
没有默认构造函数,系统会报错:
#include<map>#include<sstream>using namespace std; class myInt{public: myInt(int a ,int b):m_li(a),m_ri(b) {} void print() { std::cout<<"m_li = "<<this->m_li<<std::endl; std::cout<<"m_ri = "<<this->m_ri<<std::endl; } void set(int li, int ri) { this->m_li = li; this->m_ri = ri; }private: int m_li; int m_ri;};int main() {std::vector<myInt> v1(30);for(std::vector<myInt>::iterator iter = v1.begin(); iter != v1.end(); iter++) { iter->print(); }return 0;}
报错信息:error C2512: “myInt”: 没有合适的默认构造函数可用。
分析:myInt(int a ,int b):m_li(a),m_ri(b) 该类定义了构造函数,编译器就不会定义默认构造函数,所以,就会报错。
正确的做法:
class myInt{public: myInt(int a ,int b):m_li(a),m_ri(b) {}myInt():m_li(0),m_ri(0) {} void print() { std::cout<<"m_li = "<<this->m_li<<std::endl; std::cout<<"m_ri = "<<this->m_ri<<std::endl; } void set(int li, int ri) { this->m_li = li; this->m_ri = ri; }private: int m_li; int m_ri;};int main() {std::vector<myInt> v1(30);for(std::vector<myInt>::iterator iter = v1.begin(); iter != v1.end(); iter++) { iter->print(); }return 0;}
0 0
- vector中存放自定义类 ,对类的要求
- 项目中自定义类的存放管理
- C++对存放对象的Vector容器按自定义字段排序
- 关于Vector中存放指针的问题
- vector 中存放数组
- 程序员对类的要求
- 文件中类的存放
- 由“用存放中文字符串的vector作为map的key”引出“严格弱序要求”
- 在既有类中使用关联对象存放自定义数据
- 在既有类中使用关联对象存放自定义数据
- vector中存放函数指针
- c++ vector中存放指针
- vector容器中存放结构体类型的变量
- Vector容器中存放结构体类型的变量
- vector容器中存放结构体类型的变量
- 实战c++中的vector系列--对vector<自定义类>使用std::find 和 std::find_if 算法
- 实战c++中的vector系列--对vector<自定义类>使用std::find 和 std::find_if 算法
- std::vector存放类的指针避免拷贝构造函数的调用
- 内存计数器实现限频
- 循环结构
- SDWebImage加进度条展示图片下载进度
- 026.LinkedList底层详解
- easy-size控件自适应大小的使用
- vector中存放自定义类 ,对类的要求
- 【大话GSM】WCDMA和LTE在提供数据和语音业务上的差异
- Markdown快速入门
- 15-11-16 Eclipse 操作菜单汉译之 Help [帮助]
- 为你详解安装arm-linux-gcc
- frame bounds center
- source insight 注册码
- 没有躲过的坑--string中的c_str()陷阱
- 数组