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

天津网站开发贴吧湖南 seo

天津网站开发贴吧,湖南 seo,做php网站前端价格,企业进行网站建设的方式有哪些创建一个矩形的类(Rectangle),为保持Rectangle对象较小,可以只在其对象中保存一个指针,用于指向辅助的结构体,定义其范围的点数据存放在辅助的结构体中: class Point { // 表示点的类 public:P…

 创建一个矩形的类(Rectangle),为保持Rectangle对象较小,可以只在其对象中保存一个指针,用于指向辅助的结构体,定义其范围的点数据存放在辅助的结构体中:

class Point { // 表示点的类
public:Point(int x, int y);...void setX(int newVal);void setY(int newVal);...
};
struct RectData { // 矩形的点数据Point ulhc; // ulhc = " upper left-hand corner"Point lrhc; // lrhc = " lower right-hand corner"
};
class Rectangle {...Point& upperLeft() const { return pData->ulhc; }Point& lowerRight() const { return pData->lrhc; }
private:std::shared_ptr<RectData> pData; 
}; Point coord1(0, 0);
Point coord2(100, 100);
const Rectangle rec(coord1, coord2); // Rec是一个const矩形,范围从//(0,0)到(100,100)
rec.upperLeft().setX(50); // 现在变为 (50, 0) 到 (100, 100)!

 这个设计可以编译,但它是错误的。我们设计的类返回的是一个const修饰的对象,但是我们还是可以修改内部对象的值。
我们可以为函数的返回类型添加const限制来解决这个问题:

class Rectangle {
public:...const Point& upperLeft() const { return pData->ulhc; }const Point& lowerRight() const { return pData->lrhc; }...
};

 即便如此,upperLeft和lowerRight仍然会返回对象内部的句柄,这在其他方面可能会造成问题。特别是,它可能导致悬空(dangling )句柄:指向不再存在的对象的句柄。

#include <iostream>
#include <string>
class Point { // 表示点的类
public:Point() {};Point(int x, int y) :_x{x},_y{y}{}void setX(int newVal) {_x = newVal;}void setY(int newVal) {_y = newVal;}std::string toString() const {std::string result = "(x:" + std::to_string(_x) + "," + std::to_string(_y) + ")";return result;}
private:int _x = 0;int _y = 0;
};
struct RectData { // 矩形的点数据Point ulhc; // ulhc = " upper left-hand corner"Point lrhc; // lrhc = " lower right-hand corner"
};
class Rectangle {
public:Rectangle(){}Rectangle(const Point& p1, const Point& p2) {RectData rectData;rectData.ulhc = p1;rectData.lrhc = p2;pData = std::make_shared<RectData>(rectData);}~Rectangle(){std::cout << "Rectangle析构函数执行" << std::endl;}const Point& upperLeft() const { return pData->ulhc; }const Point& lowerRight() const { return pData->lrhc; }void print() const{std::cout<<pData->ulhc.toString()<<std::endl;std::cout << pData->lrhc.toString() << std::endl;}
private:std::shared_ptr<RectData> pData;
};Rectangle boudingBox()
{Point coord1(0, 0);Point coord2(100, 100);Rectangle rect(coord1, coord2);return rect;
}int main()
{//Point coord1(0, 0);//Point coord2(100, 100);//const Rectangle rec(coord1, coord2);	//rec.print();//Point right = rec.lowerRight();//std::cout << "+++++++" << right.toString() << std::endl;rec.upperLeft().setX(50); //rec.print();const Point *right = &(boudingBox().lowerRight());std::cout << "+++++++" << right->toString() << std::endl;return 0;
}

在这里插入图片描述
 避免返回指向对象内部的句柄(引用、指针或迭代器)。遵守这个原则将会增加了封装性,帮助const成员函数保持const行为,并可以尽量避免发生悬空句柄的创建。

http://www.dinnco.com/news/39650.html

相关文章:

  • iis做的网站模板找网站设计公司
  • 网站banner图片制作百度大数据官网入口
  • 杭州网站建设 网络服务网上如何推广自己的产品
  • 厦门企业网站建设补贴搜狗网站收录
  • 域名购买成功后怎么做网站百度一下你就知道百度首页
  • asp.net做网站头部和尾部_都用什么来实现免费百度广告怎么投放
  • 电脑网站拒绝连接怎么解决seo需要掌握什么技能
  • 专用车网站建设价格五种网络营销推广方法
  • 网站优化推广 视屏论坛seo教程
  • 威海互联网公司网站排名优化培训电话
  • 新闻网站哪个做的好宁德市属于哪个省份
  • 广东网站建设服务商留号码的广告网站不需要验证码
  • 太原广告公司网站建设磁力狗
  • 网站 微信开发360优化大师官方最新
  • 服务器怎么租用墨猴seo排名公司
  • 58同城网网站建设今天的最新消息新闻
  • 天眼查企业查询在线查询seo编辑培训
  • 网站重新备案 需要关闭网站么杭州网站seo推广软件
  • laravel做的网站短视频拍摄剪辑培训班
  • 网站开发简历项目经验关键词批量调词软件
  • 潜江资讯网房屋出租百度seo怎么关闭
  • 上海做网站品牌公司天堂tv在线观看
  • 有哪些网站可以找兼职做手机优化大师
  • 衡水哪里可以做网站优化深圳seo
  • 论坛开源网站源码百度权重怎么提高
  • 有域名怎么建立网站成都爱站网seo站长查询工具
  • cocos2d-js可以做网站吗百度搜索引擎网站
  • 1688开山网一起做网站微信软文范例大全100
  • 有域名了建立免费网站seo关键词搜索和优化
  • 阿里云网站建设视频成都百度推广电话号码是多少