在对类设计的一些事实感到困惑时,特别是函数是否应该是成员,我查看了Effectivec++并找到了第23条,即Prefernon-membernon-friendfunctionstomemberfunctions。使用Web浏览器示例第一手阅读该内容是有一定道理的,但是该示例中的便利函数(在书中像这样命名非成员函数)会改变类的状态,不是吗?那么,第一个问题,他们不应该是成员(member)吗?进一步阅读,他考虑了STL函数,实际上某些类没有实现的一些函数是在STL中实现的。按照本书的思路,它们演变成一些方便的函数,这些函数被打包到一些合理的命名空间中,例如std::sort、std:
例子:templateclassBase{public:Base();friendclassT;};现在这不起作用...有没有办法做到这一点?我实际上是在尝试制作这样的通用类密封器:classClassSealer{private:friendclassSealed;ClassSealer(){}};classSealed:privatevirtualClassSealer{//...};classFailsToDerive:publicSealed{//Cannotbeinstantiated};我在这个网站的某个地方找到了这个例子,但我找不到它......(here)我知道有oth
例子:templateclassBase{public:Base();friendclassT;};现在这不起作用...有没有办法做到这一点?我实际上是在尝试制作这样的通用类密封器:classClassSealer{private:friendclassSealed;ClassSealer(){}};classSealed:privatevirtualClassSealer{//...};classFailsToDerive:publicSealed{//Cannotbeinstantiated};我在这个网站的某个地方找到了这个例子,但我找不到它......(here)我知道有oth
有这样的代码:#includeclassA{public:friendvoidfun(Aa){std::cout如何访问函数fun2()? 最佳答案 classA{public:friendvoidfun(Aa){std::cout虽然您对fun2的定义确实定义了一个“全局”函数而不是一个成员,并使其成为的friendA同时,您仍然缺少在全局范围内的同一函数的声明。这意味着该范围内的任何代码都不知道fun2存在。fun也会出现同样的问题,只是Argument-DependentLookup可以接管并找到函数,因为有一个A类型的参数。
有这样的代码:#includeclassA{public:friendvoidfun(Aa){std::cout如何访问函数fun2()? 最佳答案 classA{public:friendvoidfun(Aa){std::cout虽然您对fun2的定义确实定义了一个“全局”函数而不是一个成员,并使其成为的friendA同时,您仍然缺少在全局范围内的同一函数的声明。这意味着该范围内的任何代码都不知道fun2存在。fun也会出现同样的问题,只是Argument-DependentLookup可以接管并找到函数,因为有一个A类型的参数。
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题吗?更新问题,以便editingthispost提供事实和引用来回答它.关闭5年前。ImprovethisquestionC++friendkeyword允许classA指定classB作为它的friend。这允许ClassB访问classA的private/protected成员。我从来没有读过任何关于为什么C#(和VB.NET)没有提到它。大多数答案earlierStackOverflowquestion似乎在说它是C++的一个有用部分,并且有充分的理由使用它。根据我的经验,我必须同意。另一个questi
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题吗?更新问题,以便editingthispost提供事实和引用来回答它.关闭5年前。ImprovethisquestionC++friendkeyword允许classA指定classB作为它的friend。这允许ClassB访问classA的private/protected成员。我从来没有读过任何关于为什么C#(和VB.NET)没有提到它。大多数答案earlierStackOverflowquestion似乎在说它是C++的一个有用部分,并且有充分的理由使用它。根据我的经验,我必须同意。另一个questi