C++ 左移位位运算符重载
大家好C++ 左移位位运算符重载,c++,operator-keyword,C++,Operator Keyword,大家好 我试图重载左移位位运算符,如果任何运算符不涉及至少一个用户定义的类型,则不能重载任何运算符。您的用例涉及一个char[N]和一个int,即,您不能为这些参数重载任何运算符。如果任何运算符至少不涉及一个用户定义的类型,则您不能重载任何运算符。您的用例包含一个char[N]和一个int,也就是说,您不能为这些参数重载任何运算符。会出现什么错误?这是违反直觉的。不要这样做。我同意,这很奇怪,但是你可能需要一个指向指针的引用,例如char*&stream我希望字符串左移,或者在右边添加空格:“H
我试图重载左移位位运算符,
如果任何运算符不涉及至少一个用户定义的类型,则不能重载任何运算符。您的用例涉及一个char[N]
和一个int
,即,您不能为这些参数重载任何运算符。如果任何运算符至少不涉及一个用户定义的类型,则您不能重载任何运算符。您的用例包含一个char[N]
和一个int
,也就是说,您不能为这些参数重载任何运算符。会出现什么错误?这是违反直觉的。不要这样做。我同意,这很奇怪,但是你可能需要一个指向指针的引用,例如char*&stream
我希望字符串左移,或者在右边添加空格:“Hello”或者在左边移出“llo”。“你好”变成“Hell”似乎非常正确。由于不容易凭直觉知道手术会做什么,这可能不是一个好主意。你会犯什么错误?这是违反直觉的。不要这样做。我同意,这很奇怪,但是你可能需要一个指向指针的引用,例如char*&stream
我希望字符串左移,或者在右边添加空格:“Hello”或者在左边移出“llo”。“你好”变成“Hell”似乎非常正确。因为不容易凭直觉知道手术会做什么,这可能不是一个好主意。我收到的错误是:错误1错误C2803:“operator@user2783292此错误消息是Dietmar答案的冗长变体。@user2783292:我的答案中哪一部分说不能重载只涉及非类类型的运算符不起作用?你不清楚吗?好的,我知道了,谢谢你的澄清。你能给我举一个例子吗?@user2783292使用std::string
(除了我对在标准类型上重载运算符也持谨慎态度)。我得到的错误是:错误1错误C2803:“operator@user2783292此错误消息是Dietmar答案的冗长变体。@user2783292:我的答案中哪一部分声明不能重载仅涉及非类类型的运算符不起作用,您不清楚?好的,我知道了,谢谢您的澄清。你能给我举一个例子吗?@user2783292使用std::string
(除了我对在标准类型上重载运算符也持谨慎态度)。
char value[] = "Hello";
value << 2;
//the .h file
#pragma once
#include <iostream>
class Operators
{
public:
char *word;
int number;
Operators(void);
Operators(char str[], int num);
~Operators(void);
void Print(void);
friend char & operator<<(char &stream, int &nr);
};
#include "StdAfx.h"
#include "Operators.h"
#include <iostream>
Operators::Operators(void)
{
word = "";
number = 0;
}
Operators::Operators(char *str, int num)
{
word = str;
number = num;
}
Operators::~Operators(void)
{
}
void Operators::Print(void)
{
printf("\nThe String: %s", word);
}
friend char & operator<<(char &stream, int &nr)
{
return stream;
}
// Operator_Overloading.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "Operators.h"
#include <conio.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char value[] = "Hello";
Operators op(value, 2);
op.Print();
_getch();
return 0;
}