C++关于指针,继承和多态介绍

C++关于指针、继承和多态介绍

指针

在C++中,指针是一种保存其他变量内存地址的变量。使用指针可以传递地址而不是传递变量值。

指针的定义和使用

指针的定义方式:数据类型 *指针名称 = &变量名称;,其中“*”表示声明一个指针变量,&表示取变量地址。

int num = 10;
int *pNum = # // 定义指向num变量的指针

指针的使用方式:通过指针访问变量。

cout << *pNum << endl; // 输出num的值

指针的运算

指针可以进行四种基本运算:加上一个整数、减去一个整数、两个指针相减、比较两个指针。

int arr[5] = {1, 2, 3, 4, 5};
int *pArr = arr;
pArr += 2; // pArr指向arr[2]
cout << *pArr << endl; // 输出arr[2]的值

继承

在C++中,继承是一种代码复用机制,允许一个类继承另一个类的属性和方法。继承的类称为派生类,被继承的类称为基类。

继承的类型

C++中有三种继承方式:公有继承、私有继承、保护继承。

  • 公有继承:派生类和外部代码可以访问基类的公有成员。
  • 私有继承:派生类可以访问基类的公有和私有成员,但外部代码无法访问。
  • 保护继承:派生类可以访问基类的公有和保护成员,外部代码无法访问。

继承的语法

继承是通过在派生类中使用“:”符号来实现的。

class 基类 {
public:
    int a;
    void funcA();
};

class 派生类 : public 基类 { // 公有继承基类
public:
    int b;
    void funcB();
};

多重继承

多重继承是指派生类同时从两个或两个以上的基类继承属性和方法。C++支持多重继承,但需要避免菱形继承问题。

多态

在C++中,多态允许不同类的对象使用相同的方法名称,但实现不同的方法行为。多态有两种实现方式:虚函数和纯虚函数。

虚函数

在基类中声明虚函数,然后在派生类中重写该函数,从而实现多态特性。

class Animal {
public:
    virtual void sound() {
        cout << "This is an animal." << endl;
    }
};

class Dog : public Animal {
public:
    void sound() {
        cout << "Bark!" << endl;
    }
};

纯虚函数

纯虚函数是在基类中声明但不实现的虚函数,这样派生类必须实现该函数才能实例化。

class Shape {
public:
    virtual double getArea() = 0; // 纯虚函数
};

class Square : public Shape {
public:
    double getArea() {
        return width * width;
    }
private:
    double width;
};

示例

指针示例

int num1 = 10, num2 = 20;
int *pNum1 = &num1, *pNum2 = &num2;

*pNum1 = *pNum1 * 2;
*pNum2 += *pNum1;

cout << num1 << endl; // 输出20
cout << num2 << endl; // 输出40

继承和多态示例

class Shape {
public:
    virtual double getArea() = 0; // 纯虚函数
};

class Square : public Shape {
public:
    Square(double w) : width(w) {}
    double getArea() {
        return width * width;
    }
private:
    double width;
};

class Circle : public Shape {
public:
    Circle(double r) : radius(r) {}
    double getArea() {
        return 3.14 * radius * radius;
    }
private:
    double radius;
};

int main() {
    Shape *pShape;
    Square sq(2.0);
    Circle cr(3.0);

    pShape = &sq;
    cout << "Square area: " << pShape->getArea() << endl;

    pShape = &cr;
    cout << "Circle area: " << pShape->getArea() << endl;

    return 0;
}

输出:

Square area: 4
Circle area: 28.26

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++关于指针,继承和多态介绍 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • html页面局部刷新

    HTML页面局部刷新是指在不刷新整个页面的情况下,只刷新页面的一部分内容。以下是HTML页面局部刷新的完整攻略: 使用AJAX技术 AJAX是一种在不刷新整个页面的情况下,异步加载的技术。以下是一个示例,演示如何使用AJAX技术实现HTML页面局部刷新: <!DOCTYPE html> <html> <head> <…

    other 2023年5月7日
    00
  • Win11 将引入重新设计的文件管理器以及改善Win11应用生态

    Win11 文件管理器重新设计攻略 Win11 是微软最新发布的操作系统,它引入了重新设计的文件管理器,以及改善了应用生态。下面是详细的攻略,帮助你了解这些新功能并使用它们。 重新设计的文件管理器 Win11 的文件管理器经过重新设计,提供了更加现代化和直观的用户界面,同时增加了一些新功能。以下是一些示例说明: 1. 新的布局和外观 Win11 的文件管理器…

    other 2023年7月27日
    00
  • React Hook Form 优雅处理表单使用指南

    React Hook Form 优雅处理表单使用指南 React Hook Form 是一个用于处理表单的库,它提供了一种优雅的方式来处理表单验证和表单状态管理。本攻略将详细介绍如何使用 React Hook Form。 安装 首先,我们需要安装 React Hook Form。可以使用 npm 或者 yarn 进行安装: npm install react…

    other 2023年7月28日
    00
  • 基于mysql全文索引的深入理解

    基于MySQL全文索引的深入理解 什么是MySQL全文索引? MySQL全文索引是一种能够加速全文检索的索引技术,可以在大量文本数据中快速定位所需要的内容,适用于文本检索、关键字搜索、分类等应用场景。 MySQL全文索引的创建 在MySQL中,需要对存储文本数据的字段使用全文索引,MySQL支持对字符类型以及text、blob和longtext类型的字段创建…

    other 2023年6月27日
    00
  • citespace中介中心性什么意思

    Citespace中介中心性什么意思 Citespace是一个用于科学文献计量分析的软件,可以帮助用户发现论文之间的关联和演化趋势。在使用Citespace进行分析时,一个重要的概念是“中介中心性”。 中介中心性是指节点对其他节点之间的信息传递起到的中介作用。在Citespace中,节点可以理解为作者、学科、机构等研究主体。因此,一个节点的中介中心性越高,就…

    其他 2023年3月28日
    00
  • php使用cookie保存登录用户名的方法

    下面就为大家详细讲解一下“PHP使用cookie保存登录用户名的方法”的完整攻略。 什么是cookie? 在开始讲解之前,我们需要先了解一下cookie。cookie,即“小甜饼”,是指服务器发送到用户浏览器,记录用户访问网站的一些信息的文本文件。它可以在浏览器端存储用户信息,如登录状态、用户偏好、购物车信息等等,以便于下一次用户访问网站时可以直接使用这些信…

    other 2023年6月27日
    00
  • JAVA利用递归删除文件代码实例

    下面详细讲解一下“JAVA利用递归删除文件代码实例”的完整攻略。 1. 背景介绍 在Java的文件操作过程中,有时候需要删除文件或文件夹,为了保证删除的彻底性,我们可以使用递归来实现该过程。 2. 实现步骤 下面是JAVA利用递归删除文件代码的实现步骤: 首先判断要删除的文件或文件夹是否存在,如果不存在,则直接返回。 如果存在,则判断要删除的是文件还是文件夹…

    other 2023年6月27日
    00
  • vue2路由方式–嵌套路由实现方法分析

    Vue2 路由方式 – 嵌套路由实现方法分析 在 Vue2 中,我们可以使用嵌套路由来实现复杂的页面结构和导航。嵌套路由允许我们在一个父路由下定义子路由,从而创建层次化的页面结构。下面是详细的攻略,包含了嵌套路由的实现方法和两个示例说明。 1. 创建父路由和子路由 首先,我们需要创建一个父路由和至少一个子路由。在 Vue2 中,我们可以使用 Vue Rout…

    other 2023年7月27日
    00
合作推广
合作推广
分享本页
返回顶部