21xrx.com
2024-12-23 00:39:58 Monday
登录
文章检索 我的文章 写文章
C++ 类的继承权限介绍
2023-07-05 09:30:41 深夜i     --     --
C++ 继承 权限

C++ 中的类继承是面向对象编程中一个极其重要的概念,它允许我们从一个已经存在的父类中派生出一个新的子类,并且继承其属性和方法。在继承的过程中,不同的继承方式所具有的访问权限不一样,因此我们需要明确继承权限的概念。

在 C++ 中,类继承的访问权限包括 public、protected 和 private 三种。它们分别表示了从父类继承到的成员在子类中的访问权限:

1. public 继承

当使用 public 继承时,从父类继承到的成员(包括属性和方法)在子类中的访问权限不变,即依然可以被子类的对象直接访问。这意味着子类可以访问到父类的 public、protected 和 private 成员,但是 private 成员在子类中仍然无法被直接访问。

例如,假设有这样一个父类:


class Animal {

public:

 void eat()

  cout << "I'm eating." << endl;

 

protected:

 void run()

  cout << "I'm running." << endl;

 

private:

 void sleep()

  cout << "I'm sleeping." << endl;

 

};

如果我们使用 public 继承创建一个子类:


class Cat : public Animal {

public:

 void meow()

  cout << "I'm meowing." << endl;

 

};

那么这个子类中可以这样使用继承来的成员:


Cat cat;

cat.eat(); // OK,因为 Animal::eat() 是 public 的

cat.run(); // OK,因为 Animal::run() 是 protected 的

cat.sleep(); // 错误,因为 Animal::sleep() 是 private 的

2. protected 继承

当使用 protected 继承时,从父类继承到的 public 成员在子类中变为 protected,从父类继承到的 protected 和 private 成员在子类中仍然是 protected 和 private。这意味着子类可以访问到父类的 protected 和 public 成员,但是 private 成员在子类中仍然无法被直接访问。

例如,假设有这样一个父类:


class Animal {

public:

 void eat()

  cout << "I'm eating." << endl;

 

protected:

 void run()

  cout << "I'm running." << endl;

 

private:

 void sleep()

  cout << "I'm sleeping." << endl;

 

};

如果我们使用 protected 继承创建一个子类:


class Dog : protected Animal {

public:

 void bark()

  cout << "I'm barking." << endl;

 

};

那么这个子类中可以这样使用继承来的成员:


Dog dog;

dog.eat(); // 错误,因为 Animal::eat() 是 public 的

dog.run(); // OK,因为 Animal::run() 是 protected 的

dog.sleep(); // 错误,因为 Animal::sleep() 是 private 的

3. private 继承

当使用 private 继承时,从父类继承到的 public 和 protected 成员在子类中都变为 private,private 成员在子类中仍然是 private。这意味着子类可以访问到父类的成员,但是只能在子类的内部访问,外部无法访问。

例如,假设有这样一个父类:


class Animal {

public:

 void eat()

  cout << "I'm eating." << endl;

 

protected:

 void run()

  cout << "I'm running." << endl;

 

private:

 void sleep()

  cout << "I'm sleeping." << endl;

 

};

如果我们使用 private 继承创建一个子类:


class Mouse : private Animal {

public:

 void squeak()

  cout << "I'm squeaking." << endl;

 

};

那么这个子类中可以这样使用继承来的成员:


Mouse mouse;

mouse.eat(); // 错误,因为 Animal::eat() 和 Animal::run() 都是 private 的

mouse.run(); // 错误,因为 Animal::eat() 和 Animal::run() 都是 private 的

mouse.sleep(); // 错误,因为 Animal::sleep() 是 private 的

以上就是 C++ 中类继承权限的介绍。在继承时,我们需要根据实际需要来选择使用哪种继承方式,以确保代码的安全性和可读性。

  
  

评论区

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