C++类的设计,构造函数和析构函数

构造函数和析构函数一、实验目的1)熟悉和掌握C++中类的结构。2)熟悉类中的构造函数和析构函数。二、实验内容从键盘上读入用来表示数学表达式的字符串,计算该表达式的值。即编... 构造函数和析构函数
一、实验目的
1) 熟悉和掌握C++中类的结构。
2) 熟悉类中的构造函数和析构函数。
二、实验内容
从键盘上读入用来表示数学表达式的字符串,计算该表达式的值。即编写程序实现四则运算方程的计算结果。

编写一个完整的C++程序
展开
 我来答
咖喱花盆Db
2011-05-28 · 超过10用户采纳过TA的回答
知道答主
回答量:75
采纳率:0%
帮助的人:27万
展开全部

该问题的求解可以分为两部分:

1、中缀表达式到后缀表达式的转换;

2、后缀表达式的计算;

具体代码如下:

#include <iostream>

#define StackSize 100

#define QueueSize 100

/*队列的相关操作*/

typedef char DataType;

typedef struct{

char data[100];

int front, rear;

}SeqQueue;   // 定义队列类型

void InitQueue(SeqQueue *Q) // 初始化队列

{

Q->front = 0; 

Q->rear = 0;

}

int QueueEmpty(SeqQueue *Q) // 判空队列

{

return Q->rear == Q->front;

}

void EnQueue(SeqQueue *Q, DataType x) // 入队列

{

if ((Q->rear + 1) % QueueSize == Q->front)

{

cout << "Queue overflow" << endl;

}

else

{

Q->data[Q->rear] = x;

Q->rear = (Q->rear + 1) % QueueSize;

}

}

 

DataType DeQueue(SeqQueue *Q)  // 出队列

{

if (Q->rear == Q->front)

{

cout << "Queue empty" << endl;

}

else

{

DataType temp = Q->data[Q->front];

Q->front = (Q->front + 1) % QueueSize;

return temp;

}

}

/*栈的相关操作*/

typedef struct{

DataType data[100];

int top;

}SeqStack;    //栈类型的定义

void InitStack(SeqStack *S)  //初始化栈

{

S->top = 1;

}

void Push(SeqStack * S, DataType d) // 入栈

{

if(S->top == StackSize - 1)

{

cout << "stack overflow" << endl;

}

else

{

S->top = S->top + 1;

S->data[S->top] = d;

}

}

DataType Pop(SeqStack * S)  // 出栈

{

if (S->top == -1)

{

cout << "stack underflow" << endl;

}

else

return S->data[S->top--];

}

DataType GetTop(SeqStack *S) // 取栈顶元素

{

if (S->top == -1)

{

cout << "stack empty" << endl;

}

else

{

return S->data[S->top];

}

}

//求运算符优先级

int Priority(DataType op)

{

switch (op)

{

case '(':

case '#': return (0);

case '-':

case '+': return (1);

case '*':

case '/': return (2);

}

}

void CTPostExp(SeqQueue *Q)

{

SeqStack OS;     // 运算符栈

char c,t;

SeqStack *S;

S = &OS;

InitStack(S);

Push(S,'#');    // 压入栈底元素'#'

do   // 扫描表达式

{

c = getchar();

    switch (c)

    {

    case ' ':  

     break;    // 去除空格

case '0': 

case '1': 

case '2': 

case '3': 

case '4': 

case '5': 

case '6': 

case '7': 

case '8': 

case '9': 

EnQueue(Q, c); break;

case '(': Push(S, c); break;

case ')': 

case '#': 

do {

t = Pop(S);

if(t != '(' && t != '#')

EnQueue(Q, t);

}while (t != '(' && S->top != 1);

break;

case '+':

case '-':

case '*':

case '/':

while(Priority(c) <= Priority(GetTop(S)))

{

t = Pop(S);

EnQueue(Q, t);

}

Push(S, c);

break;

    }

}while(c != '#'); // 以'#'号结束表达式扫描

}

// 计算后缀表达式

int CPostExp(SeqQueue *Q)

{

SeqStack VS, *S;

char ch;

int x,y;

S = &VS;

InitStack(S);

while(!QueueEmpty(Q))

{

ch = DeQueue(Q);

if(ch >= '0' && ch <= '9')

{

Push(S, ch - '0');

}

else

{

y = Pop(S);

x = Pop(S);

switch (ch)

{

case '+' : Push(S, x + y); break;

case '-' : Push(S, x - y); break;

case '*' : Push(S, x * y); break;

case '/' : Push(S, x / y); break;

}

}

}

return GetTop(S);

}

int main()

{

SeqQueue *Q;

SeqQueue  PostQ;    //定义队列,存放后缀表达式

Q = &PostQ;

InitQueue(Q);       //初始化队列

cout << "请输入数学表达式(以'#'结束):\n";

CTPostExp(Q);

// 计算后缀表达式

cout << "该表达式的值为: " << CPostExp(Q) << endl;    

      return 0;

}

追问
可不可以再简单一点?看不懂啊
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
百度网友0b9fc92
2011-06-02 · TA获得超过358个赞
知道小有建树答主
回答量:444
采纳率:100%
帮助的人:223万
展开全部
这是我写的,能看懂吗,都是基本的#include<iostream>
#include<string>
using namespace std;
class actor;
class weapon
{
private:

string _name;

int _power;
public:

weapon();

weapon(string name,int power);
friend class actor;
};
weapon::weapon()
:_name("没有佩戴兵器"),_power(0)
{

}
weapon::weapon(string name,int power)
{

_name=name;

_power=power;
}

class actor
{
protected:

string _name;

bool _gender;

weapon _weapon;
public:

actor();

actor(string name,string gender);

void say();

void getweapon(weapon & weapon);

void showbingqi(weapon & weapon);

void operator+(weapon & weapon);

~actor();
};
actor::~actor()
{
cout<<_name<<"至此退隐江湖(基类析构)"<<endl;
}
actor::actor()
:_name("无名"),_gender(true)
{}

actor::actor(string name,string gender)
{

_name=name;

if(gender=="男")

{

_gender=true;

}

else

{

_gender=false;

}

cout<<"\n"<<_name<<"出现(基类构造)"<<endl;
}
void actor::say()
{

cout<<"我乃"<<_name<<"是也(基类说)"<<endl;
}
void actor::getweapon(weapon & weapon)
{

_weapon=weapon;
}
void actor::showbingqi(weapon & weapon)
{

cout<<"佩戴兵器:";

_weapon=weapon;

cout<<_weapon._name<<",威力:"<<_weapon._power<<endl;
}
void actor:perator+(weapon & weapon)
{

_weapon=weapon;
}

class monk:public actor
{
public:

monk(string name,string gender)

:actor(name,gender)

{

}

void patter();//念经

void say();

void getmonkname(string monkname);

~monk();
private:

string _monkname;
};
monk::~monk()
{

cout<<"\n"<<_name<<"退仙了(派生类析构)"<<endl;
}
void monk::patter()
{
cout<<"南无阿弥陀佛"<<endl;
}
void monk::getmonkname(string monkname)
{

_monkname=monkname;
}
void monk::say()
{

cout<<"我乃西天"<<_name<<"也(派生类说)"<<endl;

cout<<"贫僧法名:"<<_monkname<<endl;
}

int main()
{

actor tang("唐三藏","男");

tang.say();

weapon w("奔雷杖",80);

tang+w;

tang.showbingqi(w);

monk t("如来佛主","男");

t.patter();

t.getmonkname("玄奘");

t.actor::say();

t.say();

return 0;
}
追问
首先,第108行错误,原文void actor:perator+(weapon & weapon),应改为void actor::operator+(weapon & weapon)
其次,程序内容与本问题基本无关!
追答
Yeah,yeah ,you are right.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
第一根废柴
2011-05-28 · TA获得超过197个赞
知道答主
回答量:67
采纳率:0%
帮助的人:38.1万
展开全部
声明析构函数中声明释放对象
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式