私有方法

私有方法只能被类中的其他方法调用。继续使用1.4.5小节的实例,给ccircle类添加一个具有6个数据输入参数的构造函数,定义用圆上3点绘圆。利用圆上3点,可以求得圆心坐标,于是利用圆上3点绘圆的问题可以转化为利用圆心和圆上一点绘圆的问题,并最终转化为利用圆心坐标和半径绘圆的问题。这里,利用圆上3点求圆心坐标的过程可以用一个私有方法centerthreep进行定义。因为这个方法只被类的构造函数调用,所以它是私有的。

code.matlab
methods(Access=private)
    function [x0,y0]=centerthreep(x1,y1,x2,y2,x3,y3)
    %利用圆上3点求圆心坐标
        a1=x1-x3;
        b1=y1-y3;
        a2=x2-x3;
        b2=y2-y3;
        c1=(x1*x1-x3*x3+y1*y1-y3*y3)/2;
        c2=(x2*x2-x3*x3+y2*y2-y3*y3)/2;
        d=a1*b2-a2*b1;
        if(d==0)
            error('找不到圆心')
        else
            x0=(c1*b2-c2*b1)/d;
            y0=(a1*c2-a2*c1)/d;
        end
    end
end

然后在构造函数中调用此私有方法。

code.matlab
methods
    function cc=ccircle(varargin)
    %ccircle类的构造函数
    %cc=ccircle(CenterX,CenterY,Radius)
        switch nargin
        case 0
        %如果没有输入参数,创建一个默认对象
            ……
        case 1
        %如果有一个参数,返回它
            ……
        case 3
        %已知圆心和半径绘圆
            ……
        case 4
        %已知圆心和圆上一点绘圆
        ……
        case 6
        %已知圆上三点绘圆
             [x0,y0]=centerthreep(varargin(1),varargin(2),varargin(3),varargin(4),varargin(5),varargin(6));
            cc.centerx=x0;
            cc.centery=y0;
            rad=((x0-varargin(1))^2+(y0-varargin(2))^2)^(1/2);
            cc.radius=rad;
        otherwise
            error('参数个数错误')
        end
    end
end