21xrx.com
2024-12-26 16:17:47 Thursday
登录
文章检索 我的文章 写文章
C++继承中的访问权限
2023-07-05 10:37:39 深夜i     --     --
C++ 继承 访问权限

在C++中,继承是面向对象程序设计的核心概念之一。通过继承,我们可以让一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法,从而实现代码的重用和扩展。在继承中,访问权限是一个重要的概念,我们需要理解它的作用和限制,以便正确地设计和使用继承。

在C++中,有三种访问权限,分别是public、protected和private。它们分别表示不同的访问控制级别,影响继承关系中成员的可见性和访问性。下面我们分别介绍一下这三种访问权限的特点和用法。

1. public访问权限

public访问权限是最广泛的权限,它表示成员可以被任何人(包括子类和外部代码)访问和使用。一个成员如果声明为public,那么它在子类中也是public的,可以直接访问和继承。使用public访问权限的成员通常都是一些对外公开的接口或属性,如类的构造函数、析构函数、常量、静态成员等。

例如,下面是一个简单的类和它的子类,它们都有一个public方法printName可以输出成员的名字:


class Person {

public:

  Person(const std::string& name) : mName(name) {}

  void printName() std::cout << mName << std::endl;

private:

  std::string mName;

};

class Student : public Person {

public:

  Student(const std::string& name, int id) : Person(name), mId(id) {}

  void printInfo() std::cout << mName << "

private:

  int mId;

};

在这个例子中,Person类的构造函数和printName方法都被声明为public,因此可以在Student类中直接使用和继承,如在printInfo方法中调用printName方法输出姓名。注意,虽然Person类的mName成员是private的,但它也可以被Student类继承和访问,因为它在Person类中的访问权限为public。

2. protected访问权限

protected访问权限是类和其子类之间的保护级别,它表示成员可以被类和其子类访问和使用,但是不能被外部代码(包括不属于子类的其他代码)访问和使用。一个成员如果声明为protected,那么它在子类中也是protected的,可以继承和使用,但在外部代码中无法访问。使用protected访问权限的成员通常都是一些对子类开放的接口或属性,如类的成员变量、工具函数等。

例如,下面是一个简单的类和它的子类,它们都有一个protected方法getAge可以获取年龄:


class Person {

public:

  Person(int age) : mAge(age) {}

protected:

  int getAge() return mAge;

private:

  int mAge;

};

class Student : public Person {

public:

  Student(int age, int id) : Person(age), mId(id) {}

  void printInfo() { std::cout << getAge() << ", " << mId << std::endl; }

private:

  int mId;

};

在这个例子中,Person类的构造函数和getAge方法都被声明为protected,因此只能在Person类和其子类内部访问和使用。在Student类的printInfo方法中,我们调用了getAge方法获取年龄,并且直接访问了Person类的mAge成员变量,这是因为它们在Person类中的访问权限为protected。

3. private访问权限

private访问权限是最限制的权限,它表示成员只能被类内部的代码访问和使用,包括类的成员函数和友元函数,而不能被类的子类和外部代码(包括同名子类和其他代码)访问和使用。一个成员如果声明为private,那么它在子类中也是private的,不能继承和使用。使用private访问权限的成员通常都是一些对类内部实现细节的封装,如私有成员变量、辅助函数等。

例如,下面是一个简单的类,它有一个私有成员变量mPassword和一个公有方法checkPassword可以检查密码是否正确:


class Account {

public:

  Account(const std::string& name, const std::string& password)

    : mName(name), mPassword(password) {}

  bool checkPassword(const std::string& password) return mPassword == password;

private:

  std::string mName;

  std::string mPassword;

};

在这个例子中,Account类的成员变量mPassword被声明为私有成员,因此不能被子类和外部代码访问和使用。checkPassword方法虽然是公有方法,但它可以访问和使用Account类的私有成员变量,因为它在类内部定义。如果我们尝试在子类中访问mPassword成员变量,编译器会报错提示权限不足。

总之,访问权限是C++继承中一个非常重要的概念,它决定了成员在继承关系中的可见性和访问性。我们在设计和使用继承时需要详细考虑每个成员的访问权限,以保证代码的良好封装和继承的正确性和安全性。在实际开发中,我们可以使用合适的访问权限来管理类成员,提高程序的健壮性和可维护性。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复