C++ 98/03 应该学习哪些知识8

访问限定符 public/protected/private

在 C++ 中,访问限定符有三种:public、protected、private,它们用于控制类的数据成员和成员函数的访问权限。具体来说:

  1. public:表示该成员对外部代码可见,可以在类的外部访问和调用。
  2. protected:表示该成员对外部代码不可见,只能在类的成员函数或其派生类中访问和调用。
  3. private:表示该成员对外部代码完全不可见,只能在类的成员函数中访问和调用。

访问限定符可以用来实现类的封装,即将数据成员和成员函数组合在一起,形成一个独立的单元,并且对外部世界隐藏其内部细节,只暴露必要的接口。这样可以提高程序的安全性和可维护性,可以防止数据被误操作或不合法的访问,也可以隔离内部实现的变化,从而不会影响外部的调用。

下面通过一个简单的示例来说明访问限定符的使用。

class Rectangle {
private:
    double length;
    double width;

public:
    void setLength(double l) {
        length = l;
    }

    void setWidth(double w) {
        width = w;
    }

    double getArea() {
        return length * width;
    }
};

int main() {
    Rectangle r;
    r.setLength(3.0);
    r.setWidth(4.0);
    double area = r.getArea(); // 正常编译和执行

    r.length = 5.0; // 编译错误,length 是私有成员,外部代码不能直接访问
    return 0;
}

在上面的示例中,Rectangle 类中有两个私有数据成员 length 和 width,分别表示矩形的长和宽。这些成员只能在类的成员函数中访问和修改,外部代码不能直接访问。另外,Rectangle 类中有三个公有成员函数 setLength、setWidth 和 getArea,分别用于设置矩形的长和宽,以及计算矩形的面积。这些函数对外部代码可见,可以在类的外部调用。

在 main 函数中,我们创建了一个 Rectangle 类的对象 r,并通过 setLength 和 setWidth 函数设置了其长和宽。然后调用 getArea 函数计算矩形的面积,并将结果赋值给 area 变量。由于 getArea 函数是公有成员函数,对外部代码可见,所以可以在类的外部调用。

最后,我们试图直接访问 r 的私有成员 length,这样会导致编译错误。因为 length 是一个私有成员,外部代码不能直接访问。这个例子说明了访问限定符的作用,它可以限制类的成员的访问权限,从而实现封装的目。

接下来,我们使用继承的概念来进一步解释访问限定符。

在 C++ 中,继承是一种重要的面向对象编程技术,它允许我们从现有的类派生出新的类,并继承原有类的属性和行为。派生类可以访问其基类中的公有和受保护成员,但不能访问其基类的私有成员。

下面我们通过一个简单的例子来说明继承和访问限定符的使用。

class Shape {
protected:
    double width;
    double height;

public:
    Shape(double w = 0.0, double h = 0.0) {
        width = w;
        height = h;
    }

    void setWidth(double w) {
        width = w;
    }

    void setHeight(double h) {
        height = h;
    }
};

class Rectangle : public Shape {
public:
    double getArea() {
        return width * height;
    }
};

int main() {
    Rectangle r(3.0, 4.0);
    double area = r.getArea(); // 正常编译和执行

    r.width = 5.0; // 编译错误,width 是 Shape 类的受保护成员,不能在派生类中直接访问
    return 0;
}

在上面的示例中,我们定义了两个类 Shape 和 Rectangle,Rectangle 类是从 Shape 类派生而来的。Shape 类有两个受保护成员 width 和 height,分别表示形状的宽和高。在 Shape 类中,我们定义了构造函数和两个公有成员函数 setWidth 和 setHeight,用于设置宽和高。Rectangle 类中有一个公有成员函数 getArea,用于计算矩形的面积。由于 Rectangle 类是从 Shape 类派生而来的,所以它可以访问 Shape 类中的受保护成员。

在 main 函数中,我们创建了一个 Rectangle 类的对象 r,并通过构造函数设置其宽和高。然后调用 getArea 函数计算矩形的面积,并将结果赋值给 area 变量。由于 getArea 函数是公有成员函数,对外部代码可见,所以可以在类的外部调用。

最后,我们试图直接访问 r 的受保护成员 width,这样会导致编译错误。因为 width 是 Shape 类的受保护成员,不能在派生类中直接访问。这个例子说明了继承和访问限定符的作用,它们可以帮助我们实现类之间的关系,以及限制成员的访问权限,从而实现更加灵活和安全的编程。

你可能感兴趣的:(c++语言特性,c++,学习,java)