ANSI C(或任何其他C)中的“私有”或“公共”关键字,还是仅用C ++(以及Java,C#,...)添加?
答案 0 :(得分:31)
private
不是C89或C99关键字。见C Programming/Reference Tables on Wikibooks *。
此外,C与Java和C#没有任何关系(实际上,也不是C ++)。然而,反过来却不正确 - 例如,C ++从C增长。
*需要更好的参考!
**实际上,C89 "borrowed" the const
and volatile
keywords from C++。同样,C99“借用”了inline
关键字,还添加了_Bool
和_Complex
(分别与C ++的bool
和complex
一样) [引用] -needed] 的
答案 1 :(得分:11)
也不是C关键字,但有些人会执行以下操作:
#define public
#define private static
对于那些认为做上述事情是个坏主意的人,我会同意。但它确实解释了为什么有人会认为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");
}
对于那些认为不能用C ++编译的人,是的,上面的程序会。
实际上,由于C ++标准的这一部分,它是未定义的行为:
包含a的翻译单元 标头不得包含任何宏 定义声明或定义的名称 在那个标题中。也不应该这样 翻译单元定义宏 名称与关键字词汇相同。
所以上面和下面的例子不需要在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);
}
<强> 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
答案 2 :(得分:0)
您只能在代码中定义它们的部分使用静态变量(在函数,结构中......)。