当前位置: 首页 > news >正文

建设门户网站的目的和需求友汇网网站建设

建设门户网站的目的和需求,友汇网网站建设,金山区做网站吗,海拉尔做自己的网站C类的新功能 一、默认成员函数二、类成员变量初始化三、default关键字四、delete关键字六、final关键字七、override关键字 一、默认成员函数 八个默认成员函数 在C11之前#xff0c;一个类中有如下六个默认成员函数#xff1a; 构造函数。析构函数。拷贝构造函数。拷贝赋值… C类的新功能 一、默认成员函数二、类成员变量初始化三、default关键字四、delete关键字六、final关键字七、override关键字 一、默认成员函数 八个默认成员函数 在C11之前一个类中有如下六个默认成员函数 构造函数。析构函数。拷贝构造函数。拷贝赋值函数。取地址重载函数。const取地址重载函数。 这里“默认”的意思就是你不写编译器会自动生成在C11标准中又增加了两个默认成员函数分别是移动构造函数和移动赋值重载函数 默认移动构造和默认移动赋值的生成条件 C11中新增的移动构造函数和移动赋值函数的生成条件如下 移动构造函数的生成条件没有自己实现移动构造函数并且没有自己实现析构函数、拷贝构造函数和拷贝赋值函数。移动赋值重载函数的生成条件没有自己实现移动赋值重载函数并且没有自己实现析构函数、拷贝构造函数和拷贝赋值函数。 注意 如果我们自己实现了移动构造或者移动赋值就算没有实现拷贝构造和拷贝赋值编译器也不会生成默认的拷贝构造和拷贝赋值。 默认生成的移动构造和移动赋值会做什么 默认生成的移动构造函数对于内置类型的成员会完成值拷贝浅拷贝对于自定义类型的成员如果该成员实现了移动构造就调用它的移动构造否则就调用它的拷贝构造。默认生成的移动赋值重载函数对于内置类型的成员会完成值拷贝浅拷贝对于自定义类型的成员如果该成员实现了移动赋值就调用它的移动赋值否则就调用它的拷贝赋值。 要想验证默认生成的移动构造和移动赋值确实做了上述工作这里需要模拟实现一个简化版的string类类当中只编写了几个我们需要用到的成员函数。 代码如下 namespace lx {class Person{public:Person(string name, int age):_name(name),_age(age){}Person(const Person p){_name p._name;_age p._age;}Person operator(const Person p){_name p._name;_age p._age;}~Person(){ cout ~person endl;}private:string _name;int _age; } }虽然Person类当中没有实现移动构造和移动赋值但拷贝构造、拷贝赋值和析构函数Person类都实现了因此Person类中不会生成默认的移动构造和移动赋值可以通过下面的代码来验证 int main() {lx::Person s1(张三, 21);lx::Person s2 std::move(s1); //想要调用Person默认生成的移动构造return 0; }上述代码中用一个右值去构造s2对象但由于Person类没有生成默认的移动构造函数因此这里会调用Person的拷贝构造函数因为使用const修饰拷贝构造既能接收左值也能接收右值这时在Person的拷贝构造函数中就会调用string的拷贝构造函数对name成员进行深拷贝。 如果要让Person类生成默认的移动构造函数就必须将Person类中的拷贝构造、拷贝赋值和析构函数全部注释掉这时用右值去构造s2对象时就会调用Person默认生成的移动构造函数。 Person默认生成的移动构造对于内置类型成员age会进行值拷贝而对于自定义类型成员name因为我们的string类实现了移动构造函数因此它会调用string的移动构造函数进行资源的转移。而如果我们将string类当中的移动构造函数注释掉那么Person默认生成的移动构造函数就会调用string类中的拷贝构造函数对name成员进行深拷贝。 要验证Person类中默认生成的移动赋值函数可以用下面的代码验证方式和上面验证移动构造的方式是一样的。 int main() {lx::Person s1(张三, 21);lx::Person s2;s2 std::move(s1); //想要调用Person默认生成的移动赋值return 0; }说明一下 我们在模拟实现的string类的拷贝构造、拷贝赋值、移动构造和移动赋值函数中都打印了一条提示语句因此可以通过控制台输出判断是否调用了对应的函数。由于VS2013没有完全支持C11因此上述代码无法在VS2013当中验证需要使用更新一点的编译器进行验证比如VS2019。 二、类成员变量初始化 默认生成的构造函数对于自定义类型的成员会调用其构造函数进行初始化但并不会对内置类型的成员进行处理。于是C11支持非静态成员变量在声明时进行初始化赋值默认生成的构造函数会使用这些缺省值对成员进行初始化。比如 class Person { public://... private://非静态成员变量可以在成员声明时给缺省值string _name 张三; //姓名int _age 20; //年龄static int _n; //普通静态成员变量不能给缺省值//const static int _n 10; //使用const修饰的静态成员变量可以给缺省值但一般不建议 };注意 这里不是初始化而是给声明的成员变量一个缺省值。 三、default关键字 C11可以让我们更好的控制要使用的默认成员函数假设在某些情况下我们需要使用某个默认成员函数但是因为某些原因导致无法生成这个默认成员函数这时可以使用default关键字强制生成某个默认成员函数。 例如下面的Person类中实现了拷贝构造函数 class Person { public://拷贝构造函数Person(const Person p):_name(p._name), _age(p._age){} private:string _name; int _age; };这时如下代码就无法编译成功了因为Person类中编写了拷贝构造函数导致无法生成默认的构造函数因为默认构造函数生成的条件是没有编写任意类型的构造函数包括拷贝构造函数。 int main() {lx::Person s; //没有合适的默认构造函数可用return 0; }这时我们就可以使用default关键字强制生成默认的构造函数如下 class Person { public:Person() default; //强制生成默认构造函数//拷贝构造函数Person(const Person p):_name(p._name), _age(p._age){} private:string _name; int _age; };说明一下 默认成员函数都可以用default关键字强制生成包括移动构造和移动赋值。 四、delete关键字 当我们想要限制某些默认函数生成时可以通过如下两种方式 在C98中可以将该函数设置成私有并且只用声明不用定义这样当外部调用该函数时就会报错。在C11中可以在该函数声明后面加上delete表示让编译器不生成该函数的默认版本我们将delete修饰的函数称为删除函数。 例如要让一个类不能被拷贝可以用delete修饰将该类的拷贝构造和拷贝赋值。 class Person { public:Person(){} private:Person(const Person) delete;Person operator(const Person) delete; };说明一下 被delete修饰的函数可以设置为公有也可以设置为私有效果都一样。 六、final关键字 final修饰类 被final修饰的类叫做最终类最终类无法被继承。比如 //被final修饰该类不能再被继承 class Person final {... };final修饰虚函数 final修饰虚函数表示该虚函数不能再被重写如果子类继承后重写了该虚函数则编译报错。比如 //父类 class Person { public:virtual void Print() final //被final修饰该虚函数不能再被重写{cout hello Person endl;} }; //子类 class child : public Person { public:virtual void Print() //重写编译报错{cout hello child endl;} };七、override关键字 override修饰子类的虚函数检查子类是否重写了父类的某个虚函数如果没有没有重写则编译报错。比如 //父类 class Person { public:virtual void Print(){cout hello Person endl;} }; //子类 class child : public Person { public:virtual void Print() override //检查子类是否重写了父类的某个虚函数{cout hello child endl;} };分享就到这了如有错误还望指出。
http://www.w-s-a.com/news/625827/

相关文章:

  • 企业网站关站大型综合新闻门户网站织梦模板
  • 网站优化排名易下拉效率查企业网站
  • 网站建设湛江关于汽车的网站
  • 南宁模板建站多少钱企业黄页名单
  • 企业网站的建设一般要素有网站定制公司地址
  • 婚纱摄影网站设计案例四川省城乡建设厅官方网站
  • 怎么做海淘网站wordpress首页表单
  • 大连网站优化技术长沙高端网站建设服务
  • 郎创网站建设做的网站 v2ex
  • 广东网站建设教程江西城乡住房建设网站
  • 做ppt卖给网站wordpress insert
  • 文化传媒公司网站模板wordpress转typecho
  • 网站建设设计视频郑州 服装网站建设
  • 网站建设什么公司好织梦cms默认密码
  • 大型网站 空间网上商城官网入口
  • 成都全美网站建设江苏专业网站建设
  • 足球网站模板有帮忙做阿里巴巴网站的吗
  • 建设厅报名网站京东网站的建设与发展前景
  • 金寨县住房和城乡建设部网站网页作业怎么做一个网站
  • 做ppt模板网站有哪些内容wap是什么意思卡老师
  • 网站建设一定要域名吗网站后台关键词设置
  • 标书制作公司网站坪山网站建设哪家便宜
  • 防止做网站的人修改数值门户网站架构
  • 电子项目外包网站考二建需要什么学历和专业
  • 做网站推广引流效果好吗电商推广技巧
  • 亦庄网站建设价格广州网站推广服务
  • 十大免费ppt网站下载重庆在线高校平台登录
  • 做环保网站案例百度seo教程
  • 体育用品网站模板网站建设话术
  • 潍坊网站建设服务商做网站多久能盈利