27类的成员函数

简介: 27类的成员函数

C++入门——60s从0到1

类的成员函数

 

类的成员函数是类中定义的函数,用于实现对象的行为。成员函数可以访问类的私有成员和公有成员,并且可以通过对象来操作对象的数据成员。在C++中,成员函数的声明、定义和使用都需要遵循一定的语法规则。

 

成员函数的声明

 

在C++中,成员函数的声明使用类名和作用域解析运算符::后跟函数名和一对圆括号(),圆括号中可以传递参数列表。如果成员函数是虚函数,则需要在函数名前加上关键字virtual。例如:

 

class MyClass {
public:
    void print(int x); // 成员函数的声明
private:
    int m_x; // 数据成员
};

 

在上面的代码中,print()是一个公有成员函数,它接受一个整型参数x。如果在类的声明中没有指定函数的返回类型,则默认为void类型。如果在函数名前加上了virtual关键字,则该函数是一个虚函数,可以在派生类中被重写(override)。

 

成员函数的定义

 

在C++中,成员函数的定义是在类体中进行的。成员函数的定义需要与声明相匹配,即需要具有相同的函数名、参数列表和访问控制符。成员函数的定义可以使用作用域解析运算符::来限定类名,也可以省略类名,直接使用作用域解析运算符::后跟作用域限定符(如this->或->)来限定当前对象的类型。例如:

 

class MyClass {
public:
    void print(int x) { // 成员函数的定义
        cout << "x = " << x << endl;
    }
private:
    int m_x; // 数据成员
};

 

 

在上面的代码中,print()是一个公有成员函数,它的定义在类体中进行。在函数体内部,我们使用了cout语句来输出参数x的值。

 

调用成员函数

 

在C++中,可以通过对象来调用成员函数。调用方式为:对象名.成员函数名(参数列表)。例如:

 

MyClass obj; // 创建对象

obj.print(10); // 调用成员函数

 

在上面的代码中,我们首先创建了一个MyClass类型的对象obj,然后通过obj调用了print()函数,并传递了参数10。在调用时,编译器会自动将对象作为第一个隐含参数传递给成员函数,这个隐含参数被称为this指针。

 

虚函数和纯虚函数

 

虚函数是一种特殊的成员函数,可以在派生类中被重写(override),从而实现多态性。如果一个基类的成员函数被声明为虚函数,则在派生类中对该函数进行重写时需要使用关键字override。纯虚函数是一种特殊的虚函数,它的声明在基类中没有具体的实现,而是由派生类来实现具体的实现。纯虚函数的声明需要在函数名后面加上=0,例如:

 

class MyBaseClass {
public:
    virtual void print() = 0; // 纯虚函数的声明
};
 
class MyDerivedClass : public MyBaseClass {
public:
    void print() override { // 重写基类的虚函数
        cout << "Hello, World!" << endl;
    }
};

在上面的代码中,MyBaseClass是一个基类,它包含了一个纯虚函数print()。MyDerivedClass是一个派生类,它继承自MyBaseClass并重写了print()函数。由于print()是一个纯虚函数,因此在MyBaseClass中没有具体的实现。在MyDerivedClass中对print()的重写使用了override关键字进行标记。

目录
相关文章
|
Kubernetes 调度 Docker
Docker 是什么? 和 Kubernetes(k8s) 之间是什么关系?
Docker是将程序和环境打包运行的工具,提供统一的运行环境,解决跨平台部署问题。它基于基础镜像(包含操作系统和语言环境)构建,通过Dockerfile描述构建过程,并生成容器镜像。镜像存储在Registry中,通过pull/push操作分发。容器是从镜像解压出的独立运行实例,类似轻量级虚拟机,但共享宿主机内核。Docker与Kubernetes(k8s)关系:Docker解决单容器部署,Docker Compose管理多容器服务,Docker Swarm实现集群部署,而k8s是容器编排引擎,管理Docker等容器的调度和扩展。
2032 7
Docker 是什么? 和 Kubernetes(k8s) 之间是什么关系?
|
小程序
移动医保支付
移动医保支付
885 0
|
存储 NoSQL 分布式数据库
大数据存储技术(4)—— NoSQL数据库
大数据存储技术(4)—— NoSQL数据库
2122 1
|
弹性计算 运维 Cloud Native
云原生架构的崛起与未来展望
在数字化转型的浪潮中,云原生架构凭借其高效、灵活和可扩展的特性,正逐渐成为企业IT战略的核心。本文旨在探讨云原生架构的定义、关键特性、实施优势以及面临的挑战,同时展望未来的发展趋势。通过深入分析,我们期望为读者提供一个关于云原生架构全面而深入的视角,助力企业在云计算时代做出更明智的决策。
303 30
|
存储 安全 测试技术
Docker学习路线5:在 Docker 中实现数据持久化
Docker 可以运行隔离的容器,包括应用程序和其依赖项,与主机操作系统分离。默认情况下,容器是临时的,这意味着容器中存储的任何数据在终止后都将丢失。为了解决这个问题并在容器生命周期内保留数据,Docker 提供了各种数据持久化方法。
647 0
|
IDE 前端开发 Java
从 0 编写自己的第一款 IDEA 插件!
从 0 编写自己的第一款 IDEA 插件!
283 0
从 0 编写自己的第一款 IDEA 插件!
|
1天前
|
数据采集 人工智能 安全
|
11天前
|
云安全 监控 安全
|
2天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
983 151