C++深入刨析类与对象的使用

C++深入刨析类与对象的使用

什么是类与对象

在 C++ 中,类是对一类事物的抽象描述。类是一个代码模板,它描述了包含在对象中的属性和方法。而对象是类的一个实例。

比如,我们可以定义一个实体类 Person 来描述人的属性和方法,然后我们可以用实例化出来的对象来表示不同的人。比如有人叫张三,有人叫李四,那么我们可以将张三和李四看作是 Person 类的两个对象,各自拥有自己不同的属性。

类的定义与使用

在 C++ 中,定义一个类需要使用 classstruct 关键字,如下所示:

class Person {
public:
    std::string name;
    int age;
    void show() {
        std::cout << "My name is " << name << ", and I am " << age << " years old." << std::endl;
    }
};

上述代码中定义了一个 Person 类,包含了 nameage 两个属性,以及一个 show() 方法。

下面是如何使用上述定义出来的 Person 类:

int main() {
    // 实例化一个 Person 对象
    Person person;
    // 对 person 的属性进行赋值
    person.name = "张三";
    person.age = 18;
    // 调用 person 的 show 方法
    person.show();
    return 0;
}

上述代码中,我们首先通过 Person person; 实例化了一个 Person 对象,然后通过 person.name = "张三"person.age = 18 给这个对象的属性进行了赋值,最后调用了 person.show() 方法。

构造函数与析构函数

在 C++ 中,每一个类都有至少一个构造函数。构造函数是在对象创建时自动调用的函数,用于初始化类的属性。

构造函数的名称和类名相同,并且没有返回值。如果没有声明构造函数,编译器会自动创建一个默认构造函数。

下面的示例代码中,我们在类中声明了一个默认构造函数,用来初始化对象的属性。

class Person {
public:
    // 默认构造函数
    Person() {
        name = "";
        age = 0;
    }
    std::string name;
    int age;
    void show() {
        std::cout << "My name is " << name << ", and I am " << age << " years old." << std::endl;
    }
};

析构函数是在对象销毁时自动调用的函数,用于清理对象占用的资源。如果没有声明析构函数,则编译器会自动创建一个默认析构函数。

下面的示例代码中,我们在类中声明了一个默认析构函数,用来清理对象占用的资源。

class Person {
public:
    // 默认构造函数
    Person() {
        name = "";
        age = 0;
    }
    // 默认析构函数
    ~Person() {
        std::cout << "Person对象被销毁了" << std::endl;
    }
    std::string name;
    int age;
    void show() {
        std::cout << "My name is " << name << ", and I am " << age << " years old." << std::endl;
    }
};

继承与多态

在 C++ 中,我们可以通过继承来创建一个新的类,新的类将继承原有类的所有属性和方法,并且可以添加自己的属性和方法。

继承分为公有继承、私有继承和保护继承三种类型。默认情况下,C++ 使用公有继承。

下面的示例代码中,我们定义了一个 Student 类来继承 Person 类:

class Student : public Person {
public:
    std::string major;
    void show() {
        std::cout << "My name is " << name << ", and I am " << age << " years old. I major in " << major << "." << std::endl;
    }
};

上述代码中,我们使用了公有继承的方式,让 Student 类继承了 Person 类的属性和方法,并且添加了自己的 major 属性和 show() 方法。

多态是 C++ 中一种重要的特性,它使得一个对象可以在不同的情况下表现出不同的行为。在 C++ 中实现多态需要使用虚函数。虚函数是一个在基类中声明的函数,在派生类中可以重写该函数。

下面的示例代码中,我们在 Person 类中定义了一个虚函数 show(),然后在 Student 类中重写了该函数:

class Person {
public:
    // 默认构造函数
    Person() {
        name = "";
        age = 0;
    }
    // 默认析构函数
    ~Person() {
        std::cout << "Person对象被销毁了" << std::endl;
    }
    std::string name;
    int age;
    virtual void show() {
        std::cout << "My name is " << name << ", and I am " << age << " years old." << std::endl;
    }
};

class Student : public Person {
public:
    std::string major;
    void show() {
        std::cout << "My name is " << name << ", and I am " << age << " years old. I major in " << major << "." << std::endl;
    }
};

在上述代码中,我们在 Person 类中将 show() 函数声明为了虚函数,并做了一个默认实现。然后在 Student 类中重写了该函数。这样,在我们通过 Person 类型的指针或引用调用 show() 方法时,会调用到相应的实现。

总结

本文介绍了类与对象的概念,以及如何定义类、实例化对象和使用对象的属性和方法。同时还介绍了构造函数、析构函数、继承和多态等 C++ 中的重要特性。通过本文的学习,您应该对 C++ 中的类与对象有了更深的理解。

示例1:

class Shape {
public:
    virtual double getArea() {
        return 0;
    }
};

class Circle : public Shape {
public:
    Circle(double r) {
        this->r = r;
    }
    double getArea() {
        return 3.14 * r * r;
    }
private:
    double r;
};

int main() {
    Shape *s = new Circle(2);
    cout << s->getArea() << endl; // 输出 12.56
    return 0;
}

上述代码中,我们定义了一个 Shape 类和一个 Circle 类,Circle 类继承于 Shape。在 Circle 类中,我们实现了 getArea() 方法,用来计算圆的面积。然后我们通过 Shape *s = new Circle(2) 实现了多态,将 Circle 类型的对象赋值给了 Shape 类型的指针。最终调用 s->getArea() 方法时,会调用到 Circle 类型的实现。

示例2:

class Animal {
public:
    virtual void eat() {
        cout << "Animal eat" << endl;
    }
};

class Cat : public Animal {
public:
    void eat() {
        cout << "Cat eat" << endl;
    }
};

int main() {
    Animal *a1 = new Animal();
    Animal *a2 = new Cat();
    a1->eat(); // 输出 Animal eat
    a2->eat(); // 输出 Cat eat
    return 0;
}

上述代码中,我们定义了一个 Animal 类和一个 Cat 类,Cat 类继承于 Animal。在 Cat 类中,我们重写了 eat() 方法。然后我们通过 Animal *a2 = new Cat() 实现了多态,将 Cat 类型的对象赋值给了 Animal 类型的指针。最终调用 a2->eat() 方法时,会调用到 Cat 类型的实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++深入刨析类与对象的使用 - Python技术站

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

相关文章

  • 什么是iframe及作用是什么?

    什么是iframe及作用是什么? 在网页设计的过程中,经常会遇到需要在页面内嵌入其他网页的情况,而iframe正是解决这个问题的。iframe是HTML中的一个标签,用于在当前网页中嵌入另一个网页。 iframe的基本语法 下面是iframe标签的基本语法: <iframe src="被嵌入页面的网址"></iframe…

    其他 2023年3月29日
    00
  • java 嵌套类的详解及实例代码

    ” + outerData); } } public static void main(String[] args) { OuterClass outerObj = new OuterClass(); OuterClass.InnerClass innerObj = outerObj.new InnerClass(); innerObj.printOuter…

    other 2023年7月27日
    00
  • Spring Cloud之配置中心的搭建

    下面详细讲解一下“Spring Cloud之配置中心的搭建”的完整攻略。 一、前置条件 在开始之前,需要先安装以下软件: Java JDK和JRE:安装Java JDK和JRE(Java Runtime Environment)并配置环境变量。可以在Oracle官网下载Java安装包。 Maven:在官网下载Maven压缩包并解压,然后在环境变量中设置MAV…

    other 2023年6月25日
    00
  • keil5最新破解教程(可以使用到2032年哦!):

    Keil5最新破解教程(可以使用到2032年哦!) Keil5是一款以ARM Cortex-M为基础的嵌入式系统开发工具,由Keil Software发布。然而,它是一个商业软件,需要付费才能使用。但是,我们可以通过这篇文章介绍的方法进行破解,让你能够免费且长期地使用它。 步骤一:下载Keil5软件和破解文件 首先,我们需要下载Keil5软件和破解文件。你可…

    其他 2023年3月28日
    00
  • 通过配置.htaccess文件实现子目录绑定二级域名的方法

    下面是通过配置.htaccess文件实现子目录绑定二级域名的方法的完整攻略。 1. 编写.htaccess文件 在需要绑定二级子域名的子目录下创建或编辑.htaccess文件,并在里面添加以下代码(假设要绑定的子域名是subdomain.example.com): RewriteEngine on RewriteBase /subdirectory/ Rew…

    other 2023年6月27日
    00
  • Apache Web 服务器的安装配置方法

    Apache Web 服务器的安装配置方法 安装和配置 Apache Web 服务器的基本方法 下载 Apache Web 服务器 前往官网 https://httpd.apache.org/ 下载最新版本的 Apache Web 服务器 解压缩下载后得到的压缩包 安装编译器和必要的软件 在 Linux 系统下,需要安装 gcc、make 和 apr-uti…

    other 2023年6月25日
    00
  • windows使用docker运行mysql等工具(一)windows安装docker

    Windows使用Docker运行MySQL等工具(一)Windows安装Docker的完整攻略 Docker是一种容器化技术,可以在不同的操作系统上运行应用程序。在Windows上,您可以使用Docker运行MySQL等工具。以下是Windows安装Docker的完整攻略,包含两个示例说明。 步骤一:下载和安装Docker 下载Docker。 您可以在Do…

    other 2023年5月9日
    00
  • c++ KMP字符串匹配算法

    C++ KMP字符串匹配算法攻略 简介 KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,用于在一个主串中查找一个模式串的出现位置。相比于朴素的字符串匹配算法,KMP算法具有更快的匹配速度。 算法原理 KMP算法的核心思想是利用已经匹配过的信息,避免不必要的回溯。它通过构建一个部分匹配表(Partial Match Table),…

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