方法声明后的const修饰符意味着什么? - 页 5

 
Alexey Kozitsyn:
这里所说的是,如果A类的对象1调用A类的 一个常量方法,那么该方法不能改变该对象1(即调用它的对象1)。然而,如果object1通过引用被传递到同一个常量方法,但是从A类的object2中调用,那么object1就可以被改变。而Object2则不能。

一个对象如何调用一个方法?一个方法可以从一个函数或另一个方法中调用。

它不仅仅是一个被调用的类方法,而是一个特定对象的方法。该类本身就是一个抽象概念。

[删除]  
Dmitry Fedoseev:

一个对象如何调用一个方法?一个方法可以从一个函数或另一个方法中调用。

它不仅仅是一个被调用的类方法,而是一个特定对象的方法。该类本身就是一个抽象概念。

这才是最微不足道的。和一个类型的记录

obj.method();

它叫什么?

你是自己写的。

它不仅仅是一个被调用的类方法,而是一个特定对象的方法。

你也可以说这是可以接受的。

method();

什么是方法调用?

也就是说,由什么方法来调用?

 
@Alexey Kozitsyn:

这是个难题。而像这样的条目...

这叫什么?

你自己写吧。

你告诉我这是允许的。

什么是方法调用?

就是说,用什么方法来调用它?

看看这个情况。你有问题,不是我。阿列克谢的例子对你来说似乎是不正确的,而对我来说却很清楚和可以理解。

--

"一个类型条目 "被称为对 "obj "对象的 "方法 "的调用。

--

"你还会告诉我,这样的记录是可以允许的"--印象中,你才是写这样的事情的人。

---

该方法没有调用任何东西。该方法被调用。

[删除]  
Dmitry Fedoseev:

看看现在的情况。是你,而不是我,感到困惑。阿列克谢的例子在你看来是不正确的,而在我看来却足够清楚和明白,它没有引起我的任何疑问,只是给了我一个理解。

--

"一个类型条目 "被称为对 "obj "对象的 "方法 "的调用。

--

"你还会告诉我,这样的记录是可以允许的"--印象中,你才是写这样的事情的人。

---

该方法不调用任何东西。该方法被调用。

阿列克谢的例子是可以接受的,但在我个人看来,它不应该成为其他人的榜样。

你看,你仍然没有回答我的问题:是什么启动了一个类的方法 调用(或者说,是什么调用了一个方法(不是通过一个方法调用了什么,而是什么/谁调用了这个方法本身))?

任何方法。这是个简单的问题,你为初学者写了一篇关于OOP的文章。

一个方法并不调用任何东西。该方法被调用。

那么,它是用什么来称呼呢?
 
Alexey Kozitsyn:

1.阿列克谢的例子可以接受,但在我个人看来,他不应该成为其他人的榜样。

2.你看,你还是没有回答我的问题:是什么初始化了一个类的方法 调用(或者说,是什么调用了一个方法(不是通过一个方法调用了什么,而是什么/谁调用了这个方法本身))?

3. 任何方法。这是个简单的问题,你为初学者写了一篇关于OOP的文章。

1.请提出你自己的例子。

2.没有回答。因为我不知道我们在谈论什么。

3.我也不知道我们在说什么。

 
void fun(){
   obj.method();
}
obj "对象的 "method "方法被 "fun "函数调用。
[删除]  
Dmitry Fedoseev:

1.提供你自己的例子。

2.没有回答。因为我不知道我们在谈论什么。

3.我也不知道我们在说什么。

2.讨论的是调用类方法的问题(而不是静态方法)。该类的方法由该类的对象调用,否则,该类的对象发起对该类方法的调用,例如,这个。

obj.method();   // obj - объект класса А, method() - метод класса А

如果该方法是常量,它就不能修改通过它调用的对象,即obj对象。另一方面,一个对象(如obj2)传递给它。

obj.method( obj2 );

如果通过引用传递而不使用const修饰符,则可以被修改。这就是全部。

我最初并不理解论坛 "corefeys "的说法。

关于交易、自动交易系统和测试交易策略的论坛

方法声明后的const修饰语是什么意思

Combinator, 2016.01.31 20:32

在C++中,它意味着该方法不能改变类的成员,除了被声明为可变的成员。

由于在MQL中你无法得到这样的东西,这意味着该方法原则上不能改变对象。

关于交易、自动交易系统和策略测试的论坛

方法声明后的const修饰语是什么意思?

Vasiliy Sokolov, 2016.02.01 11:55

一成不变的方法 是谚语 "我们试图做得更好,但结果还是和以前一样 "的另一个例子。我认为这根本就是C++的箴言。没有实际用途,但它使OOP-程序的设计明显复杂化,因为你经常需要控制修改对象的类型(它也必须是常数)

关于交易、自动交易系统和测试交易策略的论坛

方法声明后的const修饰语是什么意思

Vasiliy Sokolov, 2016.02.01 14:02

例子 阿列克谢写道。常量方法不能改变其类的成员...

那么,为什么它不能这样做呢?一切都变化得很好。而且措辞本身也不正确:一个常量方法不能改变其类的实例 的成员。

 
Vasiliy Sokolov:

我并不否认这一点。夏普的确是一种完美、伟大和美丽的语言。

好吧,让我们说,你总是可以摆脱约束。但你最好用一个例子简单解释一下,是什么原因导致了const?它的真正用途是什么?通过实例,最好不要凭空写出。

当你为自己写一个项目,整个项目 有几千个--几万个字符串,这是一回事。当你把一个几百万行的项目交给客户,而一个印度教的哈里克里希纳却坐在那里毫无头绪,这又是另一回事。我和来自班加罗尔的印度人一起工作,水平实际上比我们的人要低。

就像在那里:他们作为程序员接受培训,带着其余的亲戚去工作,他们可能根本就不知道什么。他们是吉普赛人。

而且,如果关键代码被打包到一个libu中,那么损坏的机会就会减少。这就是我的想法。

 
Alexey Kozitsyn:

...

为什么不可以?一切都可以改变就好了。而且措辞本身也不正确:一个常量方法不能改变其类的实例 的成员。

这就是我的意思,因为我们在这里说的不是类型。"自己的类 "显然是它自己的实例(即对象)。

 void bar(X& obj) const 
    {
        obj._x = 42; // Здесь меняем члена не своего класса OK! obj передается по ссылке и не имеет модификатора const
        _x = 42; // Попытка изменить члена своего класса ERROR!
    }

_x 成员与bar方法属于同一类别。

C obj._x - 这里的_x成员是在一个外国类obj中。

对我来说,谈论一个类而不是一个实例似乎是可以接受的,因为很明显,_x属于我们的类,我们写的,而obj.x属于外国的类,我们处理的。

说到OOP术语,这里的所有术语都有点这个意思(甚至是很多)。

 

就我个人而言,我一直把const-methods理解为不能改变类变量的方法。

我很少使用它们,因为我经常遇到这样的情况:方法的重新定义需要改变一些东西,而基础方法是不变的(这里已经提到过)。

静态方法得到了广泛的使用。在几乎任何复杂的类中。通常,这些都是 "服务性 "的附加方法,不需要访问类的变量。

此外,对于像 "一天中的秒数 "这样的常数,我尽量使用静态常数,而不是#define。在这种情况下,这种常量的声明和初始化是在不同的地方,但类型控制出现了,而且它不止一次地帮助我。