繁体   English   中英

运算符重载元素数组

Operator overloading for array of elements

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个内置的类,想为minus添加运算符重载。 我编写了代码,如果我仅输入一个元素,它就可以正常工作,但是我编写的函数应该可以用于多个元素。

当我尝试输入一个数组, (array of elements)-(one element) ,它应该从arr每个元素中“扣除” def并返回一个新的元素数组。

这是代码:

  function this=minus(obj_arr,filt)
        [lena, lenb]=size(obj_arr);
        if (lena==1)&&(lenb>1)
            obj_arr=obj_arr';
            len=lena;
        elseif (lena>1)&&(lenb==1)
            len=lenb;
        elseif (lena==1)&&(lenb==1)
            len=lena;
        else
            error('at least one dimention must be 1')
        end

        [lenfa,lenfb]=size(filt);
        if (lenfa~=1)||(lenfb~=1)
            error('filter must be 1x1')
        end


        difference=mean(filt.filtered_pf_arr);
        [~,max_val]=max(difference);
        for i=1:len-1

            temp_filt_pf=obj_arr(i).filtered_pf_arr;
            [num_calls,num_fr]=size(temp_filt_pf);
            for ii=1:num_calls
                new_temp_filf_pf=zeros(num_calls,num_fr);
                temp_mean_filt_pf=temp_filt_pf(ii,:);

                max_val_temp=temp_mean_filt_pf(max_val);
                few_def=difference.*max_val_temp;
                new_temp_filf_pf(ii,:)=temp_filt_pf(ii,:)-few_def;
            end
            obj_arr(i).filtered_pf_arr=new_temp_filf_pf;

        end
        this=obj_arr;

当我输入一个命令窗口时有效

arr- an array of elements of the class
elementx- an element of class

elementA-elementB
classname.minus(arr,elementx)
arr(1)-elementx

输入时不起作用

arr-elementx

错误:没有为类“ one_session”找到具有匹配签名的方法“减号”。

1 个回复

在这之后:

[lena, lenb]=size(obj_arr);
if (lena==1)&&(lenb>1)
    obj_arr=obj_arr';
    len=lena;
elseif (lena>1)&&(lenb==1)
    len=lenb;
elseif (lena==1)&&(lenb==1)
    len=lena;
else
    error('at least one dimention must be 1')
end

len始终为1。接下来,您有一个循环:

for i=1:len-1

那将永远不会运行。 您从数组1:(1-1) == 1:0 = []中获取i 因此,总是跳过循环。

您可能打算让len具有输入向量的长度。 您可以改为使用isvectorlength

if ~isvector(obj_arr)
    error('at least one dimension must be 1')
end
len = length(obj_arr);

请注意, length(obj_arr)max(size(obj_arr)) isvector可以实现为nnz(size(obj_arr)>1)==1 (即,大于1的维数为1),或者假设像您在代码中所做的那样使用2D矩阵,则any(size(obj_arr)==1)

接下来,确保循环遍历了向量的所有元素:

for i=1:len

出于效率考虑,您应该将函数定义为

function obj_arr = minus(obj_arr,filt)

这将使MATLAB能够更好地优化对函数的某些调用,避免就地工作时避免不必要的复制(即arr=arr-1 )。

1 数组运算符重载

我有A班和B班。 A类具有一些字段。 B类就像: 为什么执行时出现错误: 错误是: 错误C2819:类型'B'没有重载成员'operator->' 错误C2039:“ some_field_from_A”:不是“ B”的成员 为什么我需要- ...

2 为非数组元素重载下标运算符

我编写了一个模板类,用于在整数中存储多个bool。 现在,设置和获取每个bool都是通过显式函数完成的 我相信以下内容对于获取值是有效的,但是由于我们不能直接返回一点引用,因此如何设置工作? ...

3 重载数组下标[]运算符缓慢

我用c ++编写了自己的Array类,并重载了数组下标[]运算符,代码: 其中_data是指向包含数组的内存块的指针。 分析表明,这个重载运算符单独占用总计算时间的10%(在长蒙特卡罗模拟中,我使用g ++进行最大优化编译)。 这似乎很多,任何想法为什么会这样? 编辑:dtyp ...

4 mystring 类的重载数组运算符

因此,我需要帮助弄清楚如何为我必须创建的 mystring 类重载数组运算符。 我已经想通了其他一切,但由于某种原因数组给我带来了麻烦这是我的头文件 MyString 运算符 [] 的主体会是什么样子? ...

5 数组下标运算符重载

我无法理解Array obj;之间的区别Array obj; 和Array* obj = new Array; 同时重载数组索引operator [] 。 当我有一个指向该对象的指针时,我在VS 2010上收到这些错误消息。 错误C2679:二进制'=':找不到哪个运算符带有'int ...

6 运算符“ +”重载返回零数组

对于类Macierz,我有一个简单的operator +重载方法,应该从该对象获取2d矩阵变量,并将所有此矩阵变量与另一个Macierz对象的相同字段求和。 计算工作正常。 显示newM变量会产生正确的值,但是当我尝试像这样使用它时: 结果是零数组。 怎么会这样 mac ...

2018-04-18 16:50:32 1 48   c++
8 使用数组重载运算符

我有这个单位: 主要程序是: 问题是我收到此错误: [DCC错误] InsMain.dpr(20):E2149类没有默认属性 。 为什么我无法读取数组元素? 我想过要解决添加变量MyVal的问题,这样做: 然后我修改添加所以: 和写作: 不返回错误,但 ...

9 重载数组下标运算符

除了在类中,还有什么方法可以在C ++中重载数组下标运算符? 我想在读取/写入数组时调用用户定义的函数。 例如: 用array [0]编写时,我想调用自己的函数。 我知道可以通过重载operator [](例如,SafeArray类)在类内部完成此操作。 谢谢。 ...

10 重载数组分配运算符

有没有一种方法可以使操作员在对象声明期间重载以进行分配? 说我们有这个结构 无论如何,要做到这一点,所以当我们初始化该结构的对象时,数组的分配器实际上会被重载以执行其他操作? ...

2018-07-01 04:23:16 0 42   c++
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM