str*_*ger 30
private
不是C89或C99关键字.请参阅Wikibooks上的C编程/参考表*.
此外,C与Java和C#没有任何关系(实际上,也不是C++).然而,相反的情况并非如此 - 例如,C++从C增长.
*需要更好的参考!
**其实,C89"借用"了const
和volatile
关键字从C++.同样地,C99"借用"的inline
关键字,并且还增加了_Bool
和_Complex
(如C++的bool
和complex
,分别地)[引证-需要].
Tof*_*eer 12
也不是C关键字,但有些人会执行以下操作:
#define public
#define private static
Run Code Online (Sandbox Code Playgroud)
对于那些认为做上述事情是个坏主意的人,我同意.但它确实解释了为什么有人会想public
或是private
C关键词.
对于那些认为不能用C编译的人,试试这个:
#include <stdio.h>
#include <stdlib.h>
#define public
#define private static
private void sayHello(void);
public int main(void) {
sayHello();
return (EXIT_SUCCESS);
}
private void sayHello(void) {
printf("Hello, world\n");
}
Run Code Online (Sandbox Code Playgroud)
对于那些认为它不能用C++编译的人,是的,上面的程序会.
实际上,由于C++标准的这一部分,它是未定义的行为:
包含标头的转换单元不应包含定义在该标头中声明或定义的名称的任何宏.这样的翻译单元也不应该为与关键字词汇相同的名称定义宏.
所以上面和下面的例子不需要在C++中做任何有益的事情,这是一件好事.我的答案仍然完全适用于C(直到它被证明是错误的!:-)).
对于具有私有成员的C++类,您可以执行类似的操作(被视为滥用),如下所示:
main.c:
#include <cstdlib>
#define private public
#include "message.hpp"
int main() {
Message msg;
msg.available_method();
msg.hidden_method();
return (EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)
message.hpp:
#ifndef MESSAGE_H
#define MESSAGE_H
#include <iostream>
class Message {
private:
void hidden_method();
public:
void available_method();
};
inline void Message::hidden_method() {
std::cout << "this is a private method" << std::endl;
}
inline void Message::available_method() {
std::cout << "this is a public method" << std::endl;
}
#endif
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27638 次 |
最近记录: |