Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重载(),c+中的[]运算符+; 你如何在C++中重载()和[]运算符?用一些代码来证明。 这不会影响编程语言的完整性吗?_C++_Oop_Overloading_Operator Keyword - Fatal编程技术网

重载(),c+中的[]运算符+; 你如何在C++中重载()和[]运算符?用一些代码来证明。 这不会影响编程语言的完整性吗?

重载(),c+中的[]运算符+; 你如何在C++中重载()和[]运算符?用一些代码来证明。 这不会影响编程语言的完整性吗?,c++,oop,overloading,operator-keyword,C++,Oop,Overloading,Operator Keyword,下面是一个示例: class Test { const int size = 128; int data[size]; public: Test() { // allocate memory for data, etc. } int& operator[](int index) { return data[index]; } }; 它不会影响编程语言的完整性,因为只能对用户定义的类型执行运算符重载。在C++中,不可能为内置类型的操作符重载操作

下面是一个示例:

class Test {
  const int size = 128;
  int data[size];
public:
  Test() { 
    // allocate memory for data, etc.
  }

  int& operator[](int index) {
    return data[index];
  }
};

它不会影响编程语言的完整性,因为只能对用户定义的类型执行运算符重载。在C++中,不可能为内置类型的操作符重载操作符。不能使用数据指针(也包括数组)更改
[]
的行为。不能使用函数指针更改
()
的行为。换句话说,C++的核心语言特性不能被重载。p> 用哪种语言?OOP和C++不是同义词。- 1,“你会怎么…举一些例子。”这个问题有很好的潜力(比如最后一个比特和“陷阱”),但这不是。第一部分你需要的是一个教程,但不是这样。@vivek-看看右边的相关问题。我相信你能找到一些。我强烈建议除了小型的个人代码实验外,不要在任何事情中重载“()”操作符。它很容易与构造函数语法混淆,使得使用它的代码很难维护/调试。@Darcy:这不是不礼貌,但你的错误再大不过了<代码>操作程序()//>代码是函数对象的基础(AKA函子),它与迭代器一起是与C++标准库本身交互的基础。在现代C++代码中,运算符()/Cux>是用户代码中最应该重载的运算符(除了<代码>运算符=/COD>)。如果有一个对象数组,那该怎么办?它不会影响本机[]操作吗?除非您是从定义了运算符[]的类中进行子类化,否则没有本机[]运算符。如果您正在对已定义[]的对象进行子类化,那么这只是一个问题。例如std::vector。在这种情况下,您可能不想更改[]的默认行为。仅仅因为C++允许你做很多事情,并不意味着你应该做这些事情: