/*C++ 中的继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承类似,例如儿子继承父亲的财产。
继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程。例如类 B 继承于类 A,那么 B 就拥有 A 的成员变量和成员函数。
在C++中,派生(Derive)和继承是一个概念,只是站的角度不同。继承是儿子接收父亲的产业,派生是父亲把产业传承给儿子。
被继承的类称为父类或基类,继承的类称为子类或派生类。“子类”和“父类”通常放在一起称呼,“基类”和“派生类”通常放在一起称呼。
派生类除了拥有基类的成员,还可以定义自己的新成员,以增强类的功能。
以下是两种典型的使用继承的场景:
1) 当你创建的新类与现有的类相似,只是多出若干成员变量或成员函数时,可以使用继承,这样不但会减少代码量,而且新类会拥有基类的所有功能。
2) 当你需要创建多个类,它们拥有很多相似的成员变量或成员函数时,也可以使用继承。可以将这些类的共同成员提取出来,定义为基类,然后从基类继承,既可以节省代码,也方便后续修改成员。
*/
//下面我们定义一个基类 People,然后由此派生出 Student 类:
#include<iostream>
#include<string>
using namespace std;
//基类 Pelple
class People{
private:
string m_name;
int m_age;
public:
void setname(string name);
void setage(int age);
string getname();
int getage();
};
void People::setname(string name){ m_name = name; }
void People::setage(int age){ m_age = age; }
string People::getname(){ return m_name; }
int People::getage(){ return m_age;}
//派生类 Student
class Student: public People{
private:
double m_score;
public:
void setscore(double score);
double getscore();
};
void Student::setscore(double score){ m_score = score; }
double Student::getscore(){ return m_score; }
int main001(){
Student stu;
stu.setname("谢亮辉");
stu.setage(33);
stu.setscore(95.5);
cout<<stu.getname()<<"的年龄是 "<<stu.getage()<<",成绩是 "<<stu.getscore()<<endl;
return 0;
}/*
运行结果:
小明的年龄是 16,成绩是 95.5
本例中,People 是基类,Student 是派生类。Student 类继承了 People 类的成员,
同时还新增了自己的成员变量 score 和成员函数 setscore()、getscore()。
这些继承过来的成员,可以通过子类对象访问,就像自己的一样。
请认真观察代码第21行:
class Student: public People
这就是声明派生类的语法。class 后面的“Student”是新声明的派生类,冒号后面的“People”是已经存在的基类。
在“People”之前有一关键宇 public,用来表示是公有继承。
由此总结出继承的一般语法为:
class 派生类名:[继承方式] 基类名{
派生类新增加的成员
};
继承方式包括 public(公有的)、private(私有的)和 protected(受保护的),此项是可选的,如果不写,那么默认为 private。
*/
继承章节案例.rar
需积分: 0 97 浏览量
更新于2023-05-26
收藏 5KB RAR 举报
在编程领域,继承是面向对象编程的一个核心概念,它允许我们创建一个类(子类或派生类),这个类能够获得另一个类(父类或基类)的属性和方法。这个过程就像是生物学中的遗传,子类继承了父类的特性,并且可以根据需要添加新的特性或者重写已有特性。在Java、Python、C#等面向对象编程语言中,继承都是被广泛使用的。
标题“继承章节案例”提示我们这里包含的是关于继承的实际应用示例。这些案例可能包括不同类型的继承结构,如单一继承、多重继承、接口继承等。下面我们将深入探讨继承的概念、优势以及常见的应用场景。
1. 继承的概念:
- 子类(Derived Class):从一个或多个父类派生出来的类,可以扩展或修改父类的特性。
- 父类(Base Class):被其他类继承的类,提供了基础功能和属性。
2. 继承的优点:
- 代码复用:子类可以重用父类的方法和属性,避免代码重复编写。
- 多态性:子类可以有自己的独特行为,同时还能调用父类的方法。
- 扩展性:无需修改已有代码,就可以增加新的功能。
- 抽象层次提升:通过继承,可以将共同的属性和方法抽取到父类,提高代码的可读性和可维护性。
3. 继承的类型:
- 单一继承:一个子类只能有一个父类,如Java的继承机制。
- 多重继承:一个子类可以从多个父类继承,如Python的MRO(Method Resolution Order)处理多继承冲突。
- 接口继承:一些语言(如Java和C#)支持接口,它是一种纯粹的行为规范,没有实现,子类必须实现接口中定义的所有方法。
4. 继承的使用场景:
- 类型层次结构:例如,创建一个“动物”类作为父类,然后派生出“狗”、“猫”等子类。
- 具有相似行为的对象:比如,“形状”类可以作为基类,然后有“圆形”、“矩形”等子类,它们都有“计算面积”的方法。
- 多态性需求:在设计模式中,如工厂模式、策略模式等,继承常用于实现多态性。
5. Python的继承示例:
```python
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
```
在这个例子中,`Dog`和`Cat`都继承自`Animal`,并且重写了`speak`方法。
6. Java的继承示例:
```java
public class Animal {
public void speak() {
// 默认行为
}
}
public class Dog extends Animal {
@Override
public void speak() {
System.out.println("Woof!");
}
}
```
在这个Java示例中,`Dog`类继承了`Animal`并覆盖了`speak`方法。
7. C#的接口继承示例:
```csharp
interface ISwimable {
void Swim();
}
class Fish : ISwimable {
public void Swim() {
Console.WriteLine("Fish can swim.");
}
}
```
`Fish`实现了`ISwimable`接口,必须提供`Swim`方法的实现。
通过以上的讨论,我们可以理解继承在编程中的重要性以及如何在实际项目中运用。案例中的"继承章节案例"很可能包含了不同类型的继承示例,帮助学习者更好地理解和掌握这一概念。