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

网站开发 脚本怎么写seo价格查询公司

网站开发 脚本怎么写,seo价格查询公司,商丘网站建设广告,平台设计是做什么的构造/析构/赋值运算 5:了解C默默编写并调用哪些函数6:如果不想使用编译器自动生成的函数,就该明确拒绝7:为多态基类声明virtual析构函数8:别让异常逃离析构函数9:绝不在构造和析构过程中调用virtual函数10&…

构造/析构/赋值运算

  • 5:了解C++默默编写并调用哪些函数
  • 6:如果不想使用编译器自动生成的函数,就该明确拒绝
  • 7:为多态基类声明virtual析构函数
  • 8:别让异常逃离析构函数
  • 9:绝不在构造和析构过程中调用virtual函数
  • 10:令operator= 返回一个reference to *this
  • 11:在operator= 中处理自我赋值
  • 12:复制对象时勿忘其每一个成分

5:了解C++默默编写并调用哪些函数

如果我们没有任何声明,那么编译器就会默认生成一个copy构造函数,copy assignment操作符和一个析构函数以及一个默认构造函数。

所有这些函数都是Public以及inline的。

e2=e1;
A a;//默认构造函数。自己声明了,编译器就不生成了A(const A &a){}//这是copy构造函数,默认是把每个非静态成员拷贝过来,如果成员也是一个类型,那么会继续调用copy构造函数
A& operator=(const A& a){}//copy assignment操作符,默认同上

编译器生成的析构函数是non-virtual,除非这个类的基类声明是virtual。

6:如果不想使用编译器自动生成的函数,就该明确拒绝

编译器产出的函数都是Public

解决办法:把不想生成的函数,自己来定义,声明为private,代表不使用。

C++ iostream经常这样做。

但是这样member函数和friend函数还是可以使用。

解决办法:只声明函数,但不定义函数,调用的时候就会发现连接错误。

进一步解决就是把连接期错误转移到编译器。

解决办法是:专门写一个阻止copy动作的基类。基类只需要把copy之类的你不想生成的给设置为private。然后private继承基类即可。

7:为多态基类声明virtual析构函数

基类指针指向子类对象,如果基类的析构函数是non-virtual,那么会导致析构时只析构了基类的部分,但是没有析构掉子类的部分。

Base *pointer=&son;
delete pointer;

解决办法就是基类析构函数应该为virtual。(这只适用于多态性质,有些时候继承不是为了多态,就不要设置虚析构函数)

不要继承析构函数不是virtual的类

任何class只要带有virtual函数都几乎确定应该也有一个virtual析构函数。

如果class不含virtual函数,通常表示它并不意图被用做一个base class。当class不企图被当作base class,令其析构函数为virtual往往是个馊主意。

虚函数实现细节

要实现virtual函数,对象必须携带某些信息,主要用来在运行期决定哪一个virtual函数该被调用。

这份信息由vptr(virtual table pointer)指针指出。vptr指向一个由函数指针构成的数组,称为vtbl(virtual table);每一个带有virtual函数的class都有一个相应的vbtl。

当对象调用某一virtual函数,实际被调用的函数取决于该对象vptr所指的那个vtbl——编译器在其中寻找适当的函数指针。

纯虚函数(P43没看懂讲的啥)

class带一个纯虚函数会导致抽象类,即不能被实体化。

纯虚函数

virtual ~AWOV()=0;

析构函数调用顺序

从派生类开始依次向上。

8:别让异常逃离析构函数

C++不喜欢析构函数吐异常,就算吐,也要立刻解决。

例子:数据库关闭连接

~DBConn()
{db.close();
}

这样产生了异常,就很糟糕,没关闭成功还退出析构函数了,后续程序运行可能出行不好检查的bug

解决办法1:强制结束程序

DBConn::~DBConn()
{try{db.close();}catch(...){std::abort();}
}

解决办法2:强制结束程序

DBConn::~DBConn()
{try{db.close();}catch(...){//制作运行记录,记下close的失败。}
}

9:绝不在构造和析构过程中调用virtual函数

例子:

class Transaction{Transaction();virtual void logTransaction() const=0;
}
Transaction::Transaction()
{...logTransaction();
}class ButTransaction:public Transaction{public:virtual void logTransaction() const; 
}

下面这句代码有问题

ButTransaction b;

首先是ButTransaction构造函数调用,但是肯定Transaction构造函数会被更早调用(基类先构造完,才到子类)。

问题:Transaction构造函数最后一行调用了logTransaction,这个时候调用的是Transaction的版本,而不是ButTransaction的版本。

析构函数也同理。

10:令operator= 返回一个reference to *this

返回引用才能真正修改到值嘛

int a;
a=10;

11:在operator= 中处理自我赋值

没太看懂,记下结论

  • 确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确
  • 确保当对象自我赋值时operator=有良好行为。其中技术包括比较来源对象和目标对象的地址,精心周到的语句顺序,以及copy-and-swap。

12:复制对象时勿忘其每一个成分

一般只留两个函数负责对象拷贝(复制),即copy构造函数(A a(&A b))以及copy assignment(即=符号)。这些就是拷贝函数。

如果我们自己写了这些函数,不让编译器自动生成,那么新增成员变量一定要注意,还有就是注意拷贝完基类的所有部分

不该用copy assignment操作符调用copy构造函数。反过来也一样。重复代码用private函数init提取出来。

http://www.15wanjia.com/news/54332.html

相关文章:

  • 常州微元宝网站建设微商引流的最快方法是什么
  • 3dmax做动画的网站有哪些google搜索引擎优化
  • 做网站好处seo软件系统
  • 抖音代运营方案范文网站为什么要seo
  • 用什么软件做楼盘微网站关键词优化是什么工作
  • 网站设计的七个原则模板之家官网
  • 镇江地区做网站的公司网络推广电话销售技巧和话术
  • 网站推广营销怎么做搜索引擎营销概念
  • 个人可以做哪些有意思的网站西安企业做网站
  • 工作经历怎么填写河南seo快速排名
  • 广州做网站优化小红书信息流广告
  • wordpress精美博客主题苏州seo建站
  • 长沙网络营销首选智投未来成都百度搜索排名优化
  • 购物分享网站怎么做盈利chrome手机版
  • 四川省建设厅职改办网站漳州seo建站
  • 做网站的好处廊坊网站seo
  • 网络设计中网络设备选择的原则惠州企业网站seo
  • dx网站是哪家公司做的郑州本地seo顾问
  • 企业营销网站服务器1g够简单免费制作手机网站
  • 域名主机 网站建设什么是网络推广工作
  • 替网站做任务怎么做的微友圈推广平台怎么加入
  • 广州番禺建设银行网站登录怎么在百度上做推广
  • 广州建站优化公司seo站长工具是什么
  • 小城市企业网站建设免费seo技术教程
  • 物流网站建设方案百度seo
  • 网站制作器手机版舆情分析系统
  • 绵阳公司网站制作公司威海seo公司
  • wordpress get_comment上海百度移动关键词排名优化
  • 网站快速办理备案找索引擎seo
  • 宁波做网站优化价格日本积分榜最新排名