C++继承与派生解析(继承、重载/转换运算符、多重继承、多态、虚函数/纯虚函数、抽象类)

简介: C++继承与派生解析(继承、重载/转换运算符、多重继承、多态、虚函数/纯虚函数、抽象类)

文末附有测试源码 如需自取


1:继承


是面向对象编程的三大特性之一 它使得一个类可以从另一个类中派生,减少代码量。


class 类名 : 继承方式 基类名标识符
实例如下
class rectangle :public figure

不同的继承方式那么访问基类中变量的权限也不同


子类与父类的构造函数访问顺序是:先访问父类构造函数,再访问子类构造函数


2:重载运算符


重载运算符可以将你想要的运算符重载成你想要的计算方法


语法如下


operator 类型名();
实例如下
 cbook operator+(cbook b);
return cbook(m_ipage+b.m_ipage);

此处重载了+运算符,使得两个对象可以像两个整型变量一样相加


3:转换运算符


即可以强制转换数据类型  下面将double类型强制转换为int类型


double i=52.052;
int d;
d=int(i);

4:多重继承


顾名思义,一个类可以继承多个类,但实际操作容易出问题,不建议用,主流的语言如java就不支持多继承


语法如下

class 类名:继承方式 基类名,继承方式 基类名...

5:多态


多态也是面向对象编程三大特性之一,其特点是同样的消息被不同类型对象接收时可以有不同的实现


多态主要用虚函数实现 虚函数用virtual关键字来声明 一般在基类中定义虚函数,然后在派生类中具体实现虚函数


纯虚函数 是指被表明不具体实现的虚成员函数 起到一个接口的作用


声明如下 virtual 类型 函数名(参数)=0;


纯虚函数不可以被继承,派生类必须给出基类中纯虚函数的定义


6:抽象类


包含有纯虚函数的类称为抽象类 抽象类一般只作为基类派生出其他的子类 并且不可以实例化,但是可以使用指向抽象类的指针


下面是一些测试源码 如需自取

#include<iostream>
using namespace std;
class employee {
public:
  int id;
  char name[128];
  char depart[128];
  virtual void outputname() = 0;//纯虚函数 后面有个=0
};
class copreator :public employee {
public:
  char password[128];
  void outputname() {
  cout << "操作员姓名:" << name << endl;
  }
  copreator() {
  strcpy_s(name, "玫瑰少年");
  }
};
class systemmananger :public employee {
public:
  char passwordp[128];
  void outputname()
  {
  cout << "系统管理员姓名:" << name << endl;
  }
  systemmananger() {
  strcpy_s(name, "张三");
  }
};
class figure {
public:
  virtual double getarea() = 0;//纯虚函数 不具体实现 其实现留给派生类去做 提供一个接口的作用
  //因为图形类面积计算方法不确定 所以定义为纯虚函数
};
const double pi = 3.14;
class circle :public figure {
private:
  double radius;
public:
  circle(double dr) { radius = dr; }
  double getarea() {
  return radius * radius * pi;
  }
};
class rectangle :public figure {
protected:
  double height, width;
public:
  rectangle(double dheight, double dwidth) {
  height = dheight;
  width = dwidth;
  }
  double getarea() {
  return height * width;
  }
};
int main() {
  figure* fg1;
  fg1 = new rectangle(4.3, 5.2);
  cout << fg1->getarea() << endl;
  delete fg1;
  figure* fg2;
  fg2 = new circle(4.6);
  cout << fg2->getarea() << endl;
  delete fg2;
  employee* pworker;//定义指针对象
  pworker = new copreator();//调用它的构造函数为pworker赋值
  pworker->outputname();//调用coperator类的成员函数
  delete pworker;//释放且设置为空
  pworker = NULL;
  pworker = new systemmananger();//调用另一个子类的构造函数为它赋值
  pworker->outputname();//调用这个子类的成员函数
  delete pworker;//释放且设置为空
  pworker = NULL;
  return 0;
  //同样的语句 pworker->outputname()由于pworker指向的对象不同 所以其行为也不同 这实际上就是多态
}


相关文章
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
存储 编译器 C++
【c++】多态(多态的概念及实现、虚函数重写、纯虚函数和抽象类、虚函数表、多态的实现过程)
本文介绍了面向对象编程中的多态特性,涵盖其概念、实现条件及原理。多态指“一个接口,多种实现”,通过基类指针或引用来调用不同派生类的重写虚函数,实现运行时多态。文中详细解释了虚函数、虚函数表(vtable)、纯虚函数与抽象类的概念,并通过代码示例展示了多态的具体应用。此外,还讨论了动态绑定和静态绑定的区别,帮助读者深入理解多态机制。最后总结了多态在编程中的重要性和应用场景。 文章结构清晰,从基础到深入,适合初学者和有一定基础的开发者学习。如果你觉得内容有帮助,请点赞支持。 ❤❤❤
1465 0
|
存储 算法 安全
基于红黑树的局域网上网行为控制C++ 算法解析
在当今网络环境中,局域网上网行为控制对企业和学校至关重要。本文探讨了一种基于红黑树数据结构的高效算法,用于管理用户的上网行为,如IP地址、上网时长、访问网站类别和流量使用情况。通过红黑树的自平衡特性,确保了高效的查找、插入和删除操作。文中提供了C++代码示例,展示了如何实现该算法,并强调其在网络管理中的应用价值。
|
安全 编译器 C语言
【C++篇】深度解析类与对象(中)
在上一篇博客中,我们学习了C++类与对象的基础内容。这一次,我们将深入探讨C++类的关键特性,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载、以及取地址运算符的重载。这些内容是理解面向对象编程的关键,也帮助我们更好地掌握C++内存管理的细节和编码的高级技巧。
|
存储 程序员 C语言
【C++篇】深度解析类与对象(上)
在C++中,类和对象是面向对象编程的基础组成部分。通过类,程序员可以对现实世界的实体进行模拟和抽象。类的基本概念包括成员变量、成员函数、访问控制等。本篇博客将介绍C++类与对象的基础知识,为后续学习打下良好的基础。
|
安全 编译器 C++
C++ `noexcept` 关键字的深入解析
`noexcept` 关键字在 C++ 中用于指示函数不会抛出异常,有助于编译器优化和提高程序的可靠性。它可以减少代码大小、提高执行效率,并增强程序的稳定性和可预测性。`noexcept` 还可以影响函数重载和模板特化的决策。使用时需谨慎,确保函数确实不会抛出异常,否则可能导致程序崩溃。通过合理使用 `noexcept`,开发者可以编写出更高效、更可靠的 C++ 代码。
|
12月前
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
467 12
|
10月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
251 0
|
10月前
|
存储 编译器 程序员
c++的类(附含explicit关键字,友元,内部类)
本文介绍了C++中类的核心概念与用法,涵盖封装、继承、多态三大特性。重点讲解了类的定义(`class`与`struct`)、访问限定符(`private`、`public`、`protected`)、类的作用域及成员函数的声明与定义分离。同时深入探讨了类的大小计算、`this`指针、默认成员函数(构造函数、析构函数、拷贝构造、赋值重载)以及运算符重载等内容。 文章还详细分析了`explicit`关键字的作用、静态成员(变量与函数)、友元(友元函数与友元类)的概念及其使用场景,并简要介绍了内部类的特性。
396 0
|
编译器 C语言 C++
类和对象的简述(c++篇)
类和对象的简述(c++篇)

推荐镜像

更多
  • DNS
  • 下一篇
    开通oss服务