重载模板类中的二进制运算符不允许访问私有数据成员
Overloading Binary Operators within Template Class doesn't allow access to private data members
我很确定我只是在做一些愚蠢的事情,但我一辈子都搞不清楚。
下面的原始代码。。。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
template <class T> class set
{
public:
void add(T newElement);
void remove(T newElement);
bool contains(T aValue);
int size();
void print();
set<T> get();
friend set<T> operator-(const set<T>& set1, const set<T> set2){
}
friend set<T> operator&(const set<T>& set1, const set<T> set2){
}
friend set<T> operator|(const set<T>& set1, const set<T> set2){
}
private:
vector<T> setVec;
};
template <class T>
void set<T>::add(T newElement){
setVec.push_back(newElement);
}
template <class T>
void set<T>::remove(T newElement){
it = find(setVec.begin(), setVec.end(), newElement);
setVec.erase(it);
}
template <class T>
void set<T>::print(){
for (vector<T>::iterator it = setVec.begin(); it != setVec.end(); ++it){
cout << *it << endl;
}
if (setVec.empty()){
cout << "SET is empty." << endl;
}
cout << endl;
}
int main(){
set<int> s;
s.add(1);
s.add(2);
s.add(3);
s.print();
set<int> s3;
s3.add(6);
s3.add(5);
s3.add(3);
set<int> s4 = s | s3;
s4.print();
set<string> s2;
s2.add("a");
s2.add("b");
s2.add("c");
s2.print();
system("PAUSE");
return 0;
}
我只是想超载|,&,以及用于设置操作函数的-运算符。我知道如何实现该解决方案,但尽管成员函数是朋友,但我无法访问我传递的参数的私人数据成员。
有什么想法吗?
标有friend
的操作员看起来和工作都很好:
friend set<T> operator|(const set<T>& set1, const set<T> set2){
cout << set1.setVec.at(0) << " " << set2.setVec.at(0) << endl; // I am accessing private variable setVec here
set<T> ss; // Some new set to return
return ss;
}
请注意,set2
也应作为const
引用传递(与set1
相同)。另外,考虑更改类的名称,因为std
命名空间中已经有一个set
。
相关文章:
- 如何确保 Visual C++ 不允许作用域枚举访问?
- 为什么 clang 不允许通过实例访问嵌套枚举类?
- 具有C 的Antlr4中的标签生成不允许访问标签值
- 仅允许访问对象的成员,而不允许访问对象本身
- 方法中不允许访问结构指针
- 不允许转换为无法访问的基类
- 函数从模板参数中获取字段值,而不是直接访问以允许对相同信息使用不同的名称
- 允许按派生类访问,但不允许重写
- C++ 共享库不允许静态数据成员访问
- 是否有技术原因不允许using声明以不同的名称访问函数名
- 从class_Type名称访问矢量值时不允许出现错误
- 重载模板类中的二进制运算符不允许访问私有数据成员
- 为什么标准不允许 std::for_each 对无效的随机访问迭代器范围有明确定义的行为?
- 不允许直接在同一类中访问成员变量
- 为什么不允许我们访问没有公共成员函数的类外私有静态成员?
- Maya c++ API不允许访问某些工具吗?
- xcode 5.1.1抱怨:ISO c++ 11不允许访问声明
- 访问c++类成员对象,但不允许覆盖它
- 允许C++类访问其他类的某些"internal"成员,但不允许访问私有类?
- C++ 为什么对象的副本不允许访问原始对象的私有变量?