新手关于C++沉思录的一个问题

yzx714 2009-05-02 08:23:05
c++沉思录里有这样一句话:在面向对象程序设计中,某项计算结果的状态将取代先前的状态,而在函数式设计中并非如此
“某项计算结果的状态将取代先前的状态”这句话是什么意思,是不是我可以说c++的数据的生命期可以伴随着类而保存,而c这不可以??
...全文
182 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2009-05-02
  • 打赏
  • 举报
回复
个人认为c里面更重视数据的类型以及内存的一个表现形式,至于在数据上的操作不象C++那样更具体.好象需要什么操作时就定义相应的函数.
而C++在数据以及数据的操作上就考虑的比较成熟,在定义一个数据类型的时候就把这种数据类型应该有的操作封装进去了.使得我们使用起来更方便
lzh9955 2009-05-02
  • 打赏
  • 举报
回复
顶!
lpf000 2009-05-02
  • 打赏
  • 举报
回复
我觉得说的是 对象的 成员操作函数吧,对象自己改变自己
Jinhao 2009-05-02
  • 打赏
  • 举报
回复
C也是这样,只不过不会去这么看待。
在C++中,一段数据即是一个对象。

例如,下面的这段代码

struct node
{
int i;
struct node * next;
};


在C中,node被称之为结构,偏向对数据的解释。例如一个链表

struct node * head;

void insert(int x)
{
struct node * n = malloc(sizeof(node));
struct node * tail;

if(head)
{
tail = head;
while(tail->next)
tail = tail->next;

tail->next = n;
}
else
head = n;

n->i = x;
n->next = NULL;
}

在C里面,我们很难把这个链表理解成一个抽象的对象。我们仅仅知道,head是一个链表头。

在C++里,我们一般会这样定义。

class list
{
public:
void insert(int i)
{
node * n = new node;

if(head)
{
node * tail = head;
while(tail->next)
tail = tail->next;

tail->next = n;
}
else
head = n;

n->i = x;
n->next = 0;
}
private:
node * head;
};

list list_object;
list_object.insert(1);

在C++里,我们把list_object看作一个对象,而不仅仅是数据,影响这个对象状态的不仅仅是list_object所表示的这块内存,list::head和list::head->next以及next的next来都会影响这个list_object的状态.因此,list_object.insert(1)之后,虽然是在最后的一个节点添加了一个node,但这个添加的动作也就改变了这个对象的状态.
因此状态作为对象最重要的要素,不变式编程就被这样提出,而成员函数和访问控制则是保证不变式编程的重要方法.
operatingtuzi 2009-05-02
  • 打赏
  • 举报
回复
大概是说 ,类中的函数可能都对一组数据操作, 因此某个操作可能改变数据的状态, 继续调用别的函数 就有影响了。

而如果不存在于类中,只要不是全局变量 基本达不到这个效果

我觉得和楼主的理解是一样的吧
Paradin 2009-05-02
  • 打赏
  • 举报
回复
我觉得是。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧