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

网红自助下单网站史志网站建设必要性

网红自助下单网站,史志网站建设必要性,网站怎么添加模块,wordpress禁止postidC面向对象,实现算术表达式树的创建和打印的案例,来源于《C沉思录》第八章,涉及数据抽象、继承、多态(动态绑定)、句柄,其中句柄的使用是核心,关于句柄的较为简单的文章链接点击这里,…

        C++面向对象,实现算术表达式树的创建和打印的案例,来源于《C++沉思录》第八章,涉及数据抽象、继承、多态(动态绑定)、句柄,其中句柄的使用是核心,关于句柄的较为简单的文章链接点击这里,较为复杂的文章链接点击这里

        表达式(-5)*(3+4)对应的树如图,包括常数、一元运算符和二元运算符的结点,结点为图中的圆圈,“边”用箭头表示,一个结点或连接一个子结点、两个子结点或不连接子结点

        结点有三种形式:表示整数表达式,包含一个整数值,无子结点,另外两个分别表示一元表达式和二元表达式包含一个操作符,分别有一个或两个子结点,三种形式对应三个类

        三个类抽象出来一个结点概念,为它们的基类,即结点类,有子结点的类用包装基类指针的句柄表示“边”,使用句柄的作用就是隐藏继承层次,动态绑定,管理内存,避免结点复制

        基类代码

//基类Expr_node
class Expr_node{friend class Expr; //句柄类//因虚函数,重载<<的友元可以不在子类声明friend std::ostream& operator<<(std::ostream&,const Expr&);int use; //计数
protected:Expr_node():use(1) { } //默认构造,计数1virtual void  print(std::ostream&) const =  0;virtual ~Expr_node(){} //虚析构
};

        重载<<操作符函数代码(句柄类对象引用隐藏继承层次)

std::ostream& operator<<(std::ostream& o, const Expr& t)//句柄类对象t.p->print(o);return o;
}

       三个子类代码

//1、包含一个整数,没有子结点的结点类
class Int_node:public Expr_node{friend class Expr; //句柄类int n;Int_node(int k):n(k) { } //构造void print(std::ostream& o) const { o << n; }
};//2、一元运算符结点类
class Unary_node:public Expr_node{friend class Expr; //句柄类std::string op; //操作符Expr t; //句柄对象,表示"边",指向子结点Unary_node(const std::string& a, Expr t):op(a),t(t) { }void print(std::ostream& o)const{ o << "(" << op << t << ")"; }	
};//3、二元算法符结点类
class Binary_node: public Expr_node{friend class Expr;std::string op;Expr left;Expr right;Binary_node(const std::string&a, Expr b, Expr c):op(a),left(b),right(c) { }void print(std::ostream& o)const{o << "(" << left << op << right << ")";}
};

        句柄类代码(包装基类指针,动态绑定,隐藏继承层次,引用计数避免复制)

class Expr{friend std::ostream& operator<<(std::ostream&,const Expr&);//重载输出操作符<<Expr_node* p; //包装基类指针
public:Expr():p(nullptr){ } //默认构造Expr(int);                            //创建一个Int_nodeExpr(const std::string& op, Expr t);  //创建一个Unary_nodeExpr(const std::string&, Expr, Expr); //创建一个Binary_node//复制管理Expr(const Expr&);              //复制构造Expr& operator=(const Expr&);   //=运算符重载~Expr();                        //析构,释放内存
};
//句柄类构造函数,构造其包装的基类的3个子类对象
Expr::Expr(int n)
{p = new Int_node(n);
}
Expr::Expr(const std::string& op, Expr t)
{p = new Unary_node(op,t);
}
Expr::Expr(const std::string& op, Expr left, Expr right)
{p = new Binary_node(op,left, right);
}
//复制管理
Expr::Expr(const Expr& t){ p = t.p; ++p->use; }; 
Expr& Expr::operator=(const Expr& rhs)
{rhs.p->use++;if(--p->use==0)delete p;p = rhs.p;return *this;
}
Expr::~Expr()
{if(--p->use==0)//计数为0删除delete p; 
} 

        句柄的使用,所有对象只构造一次,句柄的复制只是复制基类指针,对象引用计数,并不复制对象,隐藏了继承层次,管理动态内存 

        主函数测试代码

#include <iostream>
#include <string>
int main()
{Expr t = Expr("*",Expr("-",5),Expr("+",3,4) );std:: cout << t << std::endl;t = Expr("*",t,t);std:: cout << t <<std:: endl;return 0;
}

        完整测试代码

#include <iostream>
#include <string>class Expr_node;//前置声明,因为下面的类包装了Expr_node*class Expr{friend std::ostream& operator<<(std::ostream&,const Expr&);//重载输出操作符<<Expr_node* p; //包装基类指针
public:Expr():p(nullptr){ } //默认构造Expr(int);                            //创建一个Int_nodeExpr(const std::string& op, Expr t);  //创建一个Unary_nodeExpr(const std::string&, Expr, Expr); //创建一个Binary_node//复制管理Expr(const Expr&);              //复制构造Expr& operator=(const Expr&);   //=运算符重载~Expr();                        //析构,释放内存
};//基类Expr_node
class Expr_node{friend class Expr; //句柄类//因虚函数,重载<<的友元可以不在子类声明friend std::ostream& operator<<(std::ostream&,const Expr&);int use; //计数
protected:Expr_node():use(1) { } //默认构造,计数1virtual void  print(std::ostream&) const =  0;virtual ~Expr_node(){} //虚析构
};//1、包含一个整数,没有子结点的结点类
class Int_node:public Expr_node{friend class Expr; //句柄类int n;Int_node(int k):n(k) { } //构造void print(std::ostream& o) const { o << n; }
};//2、一元运算符结点类
class Unary_node:public Expr_node{friend class Expr; //句柄类std::string op; //操作符Expr t; //句柄对象,表示"边",指向子结点Unary_node(const std::string& a, Expr t):op(a),t(t) { }void print(std::ostream& o)const{ o << "(" << op << t << ")"; }	
};//3、二元算法符结点类
class Binary_node: public Expr_node{friend class Expr;std::string op;Expr left;Expr right;Binary_node(const std::string&a, Expr b, Expr c):op(a),left(b),right(c) { }void print(std::ostream& o)const{o << "(" << left << op << right << ")";}
};//句柄类构造函数,构造其包装的基类的3个子类对象
Expr::Expr(int n)
{p = new Int_node(n);
}
Expr::Expr(const std::string& op, Expr t)
{p = new Unary_node(op,t);
}
Expr::Expr(const std::string& op, Expr left, Expr right)
{p = new Binary_node(op,left, right);
}
//复制管理
Expr::Expr(const Expr& t){ p = t.p; ++p->use; }; 
Expr& Expr::operator=(const Expr& rhs)
{rhs.p->use++;if(--p->use==0)delete p;p = rhs.p;return *this;
}
Expr::~Expr()
{if(--p->use==0)delete p; 
} 
//重载运算符<<
std::ostream& operator<<(std::ostream& o,const Expr&t)
{t.p->print(o);return o;
}int main()
{Expr t = Expr("*",Expr("-",5),Expr("+",3,4) );std:: cout << t << std::endl;t = Expr("*",t,t);std:: cout << t <<std:: endl;/* ((-5)*(3+4))(((-5)*(3+4))*((-5)*(3+4))) */return 0;
}


文章转载自:

http://2xmlhLmC.xdttq.cn
http://3iiLNjzD.xdttq.cn
http://10A3zKB7.xdttq.cn
http://NgxGMq7T.xdttq.cn
http://Th4bY2ms.xdttq.cn
http://RvoOBU1L.xdttq.cn
http://t5z5X4kV.xdttq.cn
http://8GmpFCH9.xdttq.cn
http://DYdjzpOW.xdttq.cn
http://1nSWf1ar.xdttq.cn
http://zKiWRQcS.xdttq.cn
http://SbzSD33M.xdttq.cn
http://4wGkrDzl.xdttq.cn
http://myV4CGe6.xdttq.cn
http://QM14FnsP.xdttq.cn
http://uKXlPFPy.xdttq.cn
http://GN9JwFg9.xdttq.cn
http://fFvTGQBK.xdttq.cn
http://Ga6Kpqgp.xdttq.cn
http://mr0jiyl0.xdttq.cn
http://gBsieW7y.xdttq.cn
http://NwTlgAtR.xdttq.cn
http://rwmurRWP.xdttq.cn
http://ZogpREMg.xdttq.cn
http://2lA8Poz6.xdttq.cn
http://Bnb0Qhwn.xdttq.cn
http://rPkh2GFu.xdttq.cn
http://RyVvodfU.xdttq.cn
http://OPwsqlD5.xdttq.cn
http://ia9snF7O.xdttq.cn
http://www.dtcms.com/wzjs/713557.html

相关文章:

  • 宠物用品网站开发背景个人网站规划书模板
  • 美橙互联网站备案做小程序需要什么技术
  • 公司网站开发费用入哪个科目上海闵行区怎么样
  • 北京建行网站东营租房信息网官网
  • 网站开发收费标准做库房推广哪个网站好
  • 橙米网站建设网站标识描述可以填关键词吗
  • 建设个定制网站需要多少钱大数据营销的核心
  • 公司网站有中文域名吗网站建设流程精英
  • 建设网站证深圳建设工程交易服务网龙岗分中心
  • 免费网站建设资讯临淄信息港招聘
  • 手机网站应该怎么做2345浏览器免费网站
  • 网站推广公司兴田德润官网多少长沙网页设计
  • 阿里去要企业网站建设方案书济南济南网站建设公司
  • 嵊州市住房和城乡建设局网站网络推广协议合同范本
  • 网站建设排名优化公司哪家好企企网官网
  • 一个wordpress模版几个网站邢台做wap网站找谁
  • 对网站开发的理解网站上传文件夹
  • 沈阳公司做网站的wordpress在哪儿设置关键词和描述
  • 蛋糕网站建设方案2021个人网站盈利模式
  • 网站备案承诺书怎么写2022装修简约风格效果图
  • 网站空间指的是什么网页设计代码fontweight什么意思
  • 网站首页分类怎么做的怎么做蒙文网站
  • 湛江购房网官方网站厦门网站建设公司哪个好
  • 温州市城市建设学校网站东营市住房和城乡建设管理局网站
  • 快速建立平台网站开发网站模板设计网站关键词优化排名推荐
  • zencart网站模板下载泗水网站建设
  • 培训机构活动策划网站苏州工业园区建设主管部门网站
  • 标准网站建设费用北京建设银行分行招聘网站
  • 嵌入式网站开发网站对应不同域名
  • 有经验的唐山网站建设注册网站域名