C++继承

简介: C++继承

C++继承

/*
继承允许我们依据另一个类来定义一个类,达到了重用代码功能和提高执行效率的效果
当创建一个类时,不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可
已有的类称为基类,新建的类称为派生类
// 基类
class Animal {
// eat() 函数
// sleep() 函数
};
//派生类
class Dog : public Animal {
// bark() 函数
};
一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。
定义一个派生类,我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名,形式如下:
class derived-class: access-specifier base-class
访问修饰符 access-specifier 是 public、protected 或 private 其中的一个
base-class 是之前定义过的某个类的名称
如果未使用访问修饰符 access-specifier,则默认为 private
*/
// 假设有一个基类 Shape,Rectangle 是它的派生类
#include <iostream>
using namespace std;
class Shape
{
public:
  void setLength(double len) { length = len; }
  void setWidth(double wid) { width = wid; }
  void setHeight(double hei) { height = hei; }
  // 成员
  double length;
  double width;
  double height;
};
class painCost
{
public:
  int getCost(double area)
  {
    cost = area * 10;
    return cost;
  }
  double cost;
};
/*
派生类可以访问基类中所有的非私有成员,即基类中的private成员不能在派生类中使用
当一个类派生自基类,该基类可以被继承为 public、protected 或 private 几种类型
即修饰符 access-specifier(几乎不使用 protected 或 private 继承,通常使用 public 继承)
公有继承(public):当一个类派生自公有基类时,
基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,
基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。
私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。
*/
class Rectangle:public Shape
{
public:
  int getVolume()
  {
    return length*width*height;
  }
  double getArea()
  {
    double Area = (length*height + length*width + width*height) * 2;
    return Area;
  }
};
/*
多继承:
C++ 类可以从多个类继承成员,即一个子类可以由父类
*/
class PainRectangle : public painCost, public Rectangle
{
public:
  double budget = 200;
  bool isInBudget()
  {
    if (cost > budget)
      return true;
    else
      return false;
  }
};
int main()
{
  Rectangle rec;
  rec.setLength(4);
  rec.setWidth(2);
  rec.setHeight(1);
  cout << "矩形的体积为:" << rec.getVolume() << endl;
  PainRectangle Prec;
  Prec.setLength(3);
  Prec.setWidth(2);
  Prec.setHeight(1);
  cout << "长方体的体积为:" << Prec.getVolume() << endl;
  cout << "长方体的表面积为:" << Prec.getArea() << endl;
  cout << "长方体表面涂漆需要花费:" << Prec.getCost(Prec.getArea()) << endl;
  if (Prec.isInBudget())
    cout << "花费为:" << Prec.cost << "\t预算为:" << Prec.budget << "\t超出预算" << endl;
  else
    cout << "花费为:" << Prec.cost << "\t预算为:" << Prec.budget << "\t没有超出预算" << endl;
  getchar();
  return 0;
}
目录
打赏
0
0
0
0
4
分享
相关文章
|
1月前
|
c++--继承
c++作为面向对象的语言三大特点其中之一就是继承,那么继承到底有何奥妙呢?继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用,继承就是类方法的复用。
57 0
|
4月前
|
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
234 6
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
149 5
|
6月前
|
C++学习之继承
通过继承,C++可以实现代码重用、扩展类的功能并支持多态性。理解继承的类型、重写与重载、多重继承及其相关问题,对于掌握C++面向对象编程至关重要。希望本文能为您的C++学习和开发提供实用的指导。
109 16
【C++】继承
C++中的继承是面向对象编程的核心特性之一,允许派生类继承基类的属性和方法,实现代码复用和类的层次结构。继承有三种类型:公有、私有和受保护继承,每种类型决定了派生类如何访问基类成员。此外,继承还涉及构造函数、析构函数、拷贝构造函数和赋值运算符的调用规则,以及解决多继承带来的二义性和数据冗余问题的虚拟继承。在设计类时,应谨慎选择继承和组合,以降低耦合度并提高代码的可维护性。
93 1
【C++】继承
C++的忠实粉丝-继承的热情(1)
C++的忠实粉丝-继承的热情(1)
69 0
|
9月前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
105 1
|
9月前
|
C++
C++番外篇——虚拟继承解决数据冗余和二义性的原理
C++番外篇——虚拟继承解决数据冗余和二义性的原理
103 1
|
9月前
|
C++入门11——详解C++继承(菱形继承与虚拟继承)-2
C++入门11——详解C++继承(菱形继承与虚拟继承)-2
111 0
|
9月前
|
C++入门11——详解C++继承(菱形继承与虚拟继承)-1
C++入门11——详解C++继承(菱形继承与虚拟继承)-1
92 0
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问