C++堆和栈详细介绍-自己一直模糊与易错的地方..

本文探讨了C++编程中堆和栈的区别与使用场景。栈主要用于存放函数参数和局部变量,由编译器自动管理,而堆则需要程序员手动分配和释放。堆的内存通常比栈大,但分配和释放效率较低。文章通过实例分析了堆栈的存储效率,并指出在某些情况下,栈上的数组访问速度可能优于指针。同时,文章还提到了静态数据成员的定义规则及其与普通成员的区别。
摘要由CSDN通过智能技术生成

话说昨晚写了个Calculator,一直在纠结,为何不能够把存储number和operator的Stack声明为public static,作为一个成员变量的类型:如下面这样

//自定义的方法,最后进行对比校验
#ifndef __MYCAL_H__
#define __MYCAL_H__

#include "lk_stack.h"

//主要实体类
class myCal
{
private:
	static bool ISsymbol(char ch);
	static char Precede(char symbol1,char symbol2);
	static double Cal(double left,char symbol,double right);
	static void Get2number(double &left,double&right,LinkStack<double>&);
	static LinkStack<double> numberStack;//编译通过,连接出错
	static LinkStack<char> symbolStack;//编译通过,连接出错
public:
	myCal(){};
	virtual ~myCal(){};
	static void Run();
};


这样在静态方法run()里面调用static 的两个stack,编译是能通过,但连接就出问题了.

解决方案:将两个声明到Run()里面就行了...而且要去掉static关键字,不知道为什么,可能还是和自己的底层c++实现不清楚有关..

CSDN上求助:得到的结论是:静态数据成员必须在类外定义

另外附带两个问题的解释:

1.想问下,如果使用第一种方法(作为成员变量),有没有方法改正使他成为对的?
在你的cpp文件中定义这两个静态数据成员。类似这样:
LinkStack<double> myCal::numberStack;

2.第一种方法在实际中运用的多否?还是说第二种是标准的思路?
两种用法都挺常见的。没什么标准与不标准。

真的是被java的jvm还有它的类库惯坏了啊 啊!

查了一下文档:于是就有了这篇文章:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值