当前位置:首页 C++ > 正文

c++继承的定义继承方式和访问限定符的关系

作者:野牛程序员:2024-01-03 13:44:44 C++阅读 2381

C++中,继承是一种机制,允许一个类(称为派生类或子类)从另一个类(称为基类或父类)继承属性和行为。继承的方式分为公有继承、私有继承和保护继承。访问限定符(public、private、protected)用于控制派生类对基类成员的访问权限。

继承的定义:

class 基类 {
    // 基类的成员和方法
};

class 派生类 : 访问限定符 基类 {
    // 派生类的成员和方法
};

继承方式和访问限定符的关系:

  1. 公有继承(public inheritance):

  2. class 基类 {
    public:
        // 公有成员
    protected:
        // 受保护成员
    private:
        // 私有成员
    };
    class 派生类 : public 基类 {
        // 派生类可以访问基类的公有和受保护成员
    };
    • 基类的公有成员和受保护成员在派生类中保持相同的访问权限。

    • 基类的私有成员在派生类中不可直接访问。

  3. 私有继承(private inheritance):

  4. class 派生类 : private 基类 {
        // 派生类可以访问基类的公有和受保护成员,但它们变为私有成员
    };
    • 基类的公有和受保护成员在派生类中变为私有成员。

    • 基类的私有成员在派生类中不可直接访问。

  5. 保护继承(protected inheritance):

  6. class 派生类 : protected 基类 {
        // 派生类可以访问基类的公有和受保护成员,它们变为受保护成员
    };
    • 基类的公有和受保护成员在派生类中变为受保护成员。

    • 基类的私有成员在派生类中不可直接访问。

在继承中,访问限定符的选择影响了派生类对基类成员的访问权限。

#include <iostream>

// 基类
class BaseClass {
public:
    void publicMethod() {
        std::cout << "Public method in BaseClass" << std::endl;
    }

protected:
    void protectedMethod() {
        std::cout << "Protected method in BaseClass" << std::endl;
    }

private:
    void privateMethod() {
        std::cout << "Private method in BaseClass" << std::endl;
    }
};

// 公有继承
class PublicDerivedClass : public BaseClass {
public:
    void someMethod() {
        publicMethod();    // 可以访问基类的公有成员
        protectedMethod(); // 可以访问基类的受保护成员
        // privateMethod(); // 不能直接访问基类的私有成员
    }
};

// 私有继承
class PrivateDerivedClass : private BaseClass {
public:
    void someMethod() {
        // publicMethod();    // 不能直接访问基类的公有成员
        // protectedMethod(); // 不能直接访问基类的受保护成员
        // privateMethod();   // 不能直接访问基类的私有成员
    }
};

// 保护继承
class ProtectedDerivedClass : protected BaseClass {
public:
    void someMethod() {
        publicMethod();    // 可以访问基类的公有成员
        protectedMethod(); // 可以访问基类的受保护成员
        // privateMethod(); // 不能直接访问基类的私有成员
    }
};

int main() {
    PublicDerivedClass publicDerivedObj;
    publicDerivedObj.someMethod();

    PrivateDerivedClass privateDerivedObj;
    // privateDerivedObj.someMethod(); // 由于私有继承,无法访问基类的成员

    ProtectedDerivedClass protectedDerivedObj;
    protectedDerivedObj.someMethod();

    return 0;
}

在上述代码中,演示了公有继承、私有继承和保护继承的情况。请注意,私有继承的情况下,派生类无法直接访问基类的公有和受保护成员,而保护继承的情况下,派生类可以访问基类的公有和受保护成员,但它们变为受保护成员。

野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击