前言:

本篇博客建议搭配:(Python)类和类的方法(基础教程介绍)(Python基础教程)-CSDN博客

一起学习使用; 

源代码:

#include <iostream>
#include <string>using namespace std;class Student{protected:string name;int age;string sex;int credit;public:static string stats;Student(string n,int a,string s,int c):name(n),age(a),sex(s),credit(c){}virtual string tell(){return name+"说:你好";}string getName()const{return name;}int getAge()const{return age;}string getSex()const{return sex;}int getCredit()const{return credit;}
};string Student::stats="大学";class Teacher:public Student{private:int pay;public:static string stats;Teacher(string n,int a,string s,int p):Student(name,age,sex,0),pay(p){}string tell() override{return name+"说:我不好";}int getPay() const {return pay; }
};string Teacher::stats="教师";int main(){Student student("大炮", 21, "男", 10);cout << student.tell() <<endl;cout << Student::stats <<endl;cout << student.getCredit() <<endl;Teacher teacher("富贵", 55, "男", 10000);cout << teacher.tell() << endl;cout << Teacher::stats << endl;cout << teacher.getPay() << endl; cout << teacher.getName() << endl;cout << teacher.getCredit() << endl;return 0;
}

代码解析:

下面是完整的 C++ 实现,包含详细注释和与 Python 代码的对比说明:

#include <iostream>
#include <string>// 学生类 (基类)
class Students {
protected:  // protected 允许派生类访问成员std::string name;int age;std::string sex;int credit;public:// 类属性(静态成员变量)static std::string stats;  // 相当于 Python 的类属性// 构造函数(类似 Python 的 __init__)Students(std::string n, int a, std::string s, int c) : name(n), age(a), sex(s), credit(c) {}// 成员函数(方法)virtual std::string tell() {  // virtual 允许派生类重写return name + "说:你好";}// 访问器方法std::string getName() const { return name; }int getAge() const { return age; }std::string getSex() const { return sex; }int getCredit() const { return credit; }
};// 初始化静态成员变量(类属性)
std::string Students::stats = "大学";// 教师类(派生类)
class Teachers : public Students {
private:int pay;  // 教师特有属性public:// 类属性(重新定义)static std::string stats;  // 覆盖基类的类属性// 构造函数Teachers(std::string n, int a, std::string s, int p) : Students(n, a, s, 0), pay(p) {}  // 调用基类构造函数// 重写基类方法std::string tell() override {return name + "说:我不好";}// 访问器方法int getPay() const { return pay; }
};// 初始化派生类的静态成员变量
std::string Teachers::stats = "教师";int main() {// 创建学生对象(类似 Python 的实例化)Students student("大炮", 21, "男", 10);// 调用方法和访问属性std::cout << student.tell() << std::endl;    // 输出:大炮说:你好std::cout << Students::stats << std::endl;   // 输出:大学(类属性)std::cout << student.getCredit() << std::endl; // 输出:10// 创建教师对象Teachers teacher("富贵", 55, "男", 10000);// 调用方法和访问属性std::cout << teacher.tell() << std::endl;   // 输出:富贵说:我不好std::cout << Teachers::stats << std::endl;  // 输出:教师(派生类类属性)std::cout << teacher.getPay() << std::endl;  // 输出:10000// 访问继承的属性std::cout << teacher.getName() << std::endl;  // 输出:富贵std::cout << teacher.getCredit() << std::endl; // 输出:0(从基类继承)return 0;
}

关键概念解释

1. 类属性(静态成员变量)

// Python 等效代码
// class Students:
//     stats = "大学"// C++ 实现
class Students {
public:static std::string stats;  // 声明
};// 类外初始化
std::string Students::stats = "大学";
  • static 关键字创建类级别的变量(所有对象共享)

  • 必须在类外单独初始化

  • 通过 类名::变量名 访问(如 Students::stats

2. 构造函数

// Python 等效
// def __init__(self, name, age, sex, credit):
//     self.name = name
//     ...// C++ 实现
Students(std::string n, int a, std::string s, int c) : name(n), age(a), sex(s), credit(c) {}  // 初始化列表
  • 初始化列表 : name(n), ... 类似 Python 的属性赋值

  • 最后的 {} 是必须的空函数体

  • 更高效(直接初始化而非先默认构造再赋值)

3. 继承与重写

// Python 继承
// class Teachers(Students):// C++ 继承
class Teachers : public Students {  // 公有继承
public:// 重写方法std::string tell() override { ... }
};
  • : public Students 表示公有继承

  • override 关键字明确表示重写基类方法

  • 派生类可以添加新成员(如 pay

4. 访问控制

访问修饰符类内派生类类外Python 等效
private__ 开头
protected_ 开头
public无修饰符

5. 方法调用

// Python 方法调用
// student.tell()// C++ 方法调用
student.tell();
  • 使用点运算符 . 调用方法

  • 对象在栈上创建(自动内存管理)

  • 不需要 Python 的显式 self 参数

输出结果

大炮说:你好
大学
10
富贵说:我不好
教师
10000
富贵
0

C++ 与 Python 类实现对比表

特性PythonC++
类定义class ClassName:class ClassName { ... };
构造函数__init__(self, ...)ClassName(...) { ... }
继承class Child(Parent):class Child : public Parent { ... }
方法重写直接定义同名方法使用 virtual 和 override
类属性类内直接定义static 成员 + 类外初始化
访问控制命名约定 (___)关键字 (publicprivate)
对象创建obj = ClassName()ClassName obj(...)
内存管理自动垃圾回收手动管理或智能指针
self/this显式 self 参数隐式 this 指针
多文件单文件头文件(.h) + 实现文件(.cpp)

多说一句:

构造函数语法解析:为什么要用花括号?

Person(std::string n, int a) : name(n), age(a) {}

结构分解

  1. 构造函数声明

    Person(std::string n, int a)
    • 方法名与类名相同(Person

    • 接收两个参数:字符串 n 和整数 a

  2. 成员初始化列表

    : name(n), age(a)
    • 在构造函数体执行前初始化成员变量

    • name(n):将参数 n 的值赋给成员变量 name

    • age(a):将参数 a 的值赋给成员变量 age

  3. 空函数体

    {}
    • 表示构造函数没有额外操作

    • 即使为空也必须保留花括号 {}

为什么需要空花括号 {}

  1. 语法要求:C++ 所有函数(包括构造函数)必须有大括号包裹的函数体

  2. 执行空间:即使没有代码,也需要保留执行上下文

  3. 可扩展性:方便未来添加初始化代码

完整工作流程 

注:该代码是本人自己所写,可能不够好,不够简便,欢迎大家指出我的不足之处。如果遇见看不懂的地方,可以在评论区打出来,进行讨论,或者联系我。上述内容全是我自己理解的,如果你有别的想法,或者认为我的理解不对,欢迎指出!!!如果可以,可以点一个免费的赞支持一下吗?谢谢各位彦祖亦菲!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91162.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91162.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/91162.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-文章分类下拉框实现

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解微博文章数据可视化分析-文章分类下拉框实现…

Git命令保姆级教程

Git 入门网站 https://learngitbranching.js.org/?localezh_CN Git 命令 git init // 在本地目录内部会生成.git文件夹 git initgit clone // 从git服务器拉取代码 // 代码下载完成后在当前文件夹中会有一个 shop 的目录&#xff0c;通过 cd shop 命令进入目录。 git clone ht…

Java Ai For循环 (day07)

循环结构 for&#xff1a;循环语句的作用&#xff1a;可以将一段代码重复的执行很多次for 循环语句格式&#xff1a;执行流程&#xff1a; 初始化语句执行条件判断语句&#xff0c;看结果是 true&#xff0c;还是 false false结束&#xff0c;true继续执行循环体语句执行条件控…

Directory Opus 使用优化

自定义快捷键 Directory Opus 移动标签到另一栏 设置快捷键&#xff1a;ctrl←/→ 设置步骤&#xff1a; 打开【设置】—>选择【自定义工具栏和快捷键】 选择【新建】—>【新建窗口快捷键】 输入快捷键命令 Go TABMOVEother此时可以点击运行进行测试&#xff0c;…

Qt知识点2『Ubuntu24.04.2安装Qt5.12.9各种报错』

问题1&#xff1a;Qt安装完毕后&#xff0c;新建一个最简单的测试程序&#xff0c;但是QtCreator左侧构建的三个按钮呈现灰色&#xff0c;无法进行构建操作答&#xff1a;进入QtCreator的Kits界面&#xff08;工具-选项&#xff09;&#xff0c;点击"自动检测"下的De…

TS面试题

1.TS有哪些类型&#xff08;对比与js&#xff09;&#xff1f;关键字/语法用途示例any关闭类型检查let a: any 4unknown类型安全的 anylet u: unknown 4; if (typeof u number) …never永不存在的值function err(): never { throw 0; }void无返回值function f(): void {}enu…

借助Early Hints和HarperDB改善网页性能

对电商网站来说&#xff0c;糟糕的页面性能可能会增加交易放弃率。一直以来&#xff0c;人们会使用CDN进行缓存从而缩短页面加载时间&#xff0c;但即便实施了强大的缓存&#xff0c;消费者在通过移动网络访问这些网站时可能仍然会需要频繁等待。最近诞生了一种名为“早期提示”…

MEMS陀螺如何成为无人机稳定飞行的核心?

在无人机自主翱翔、灵活机动并适应多变环境的背后&#xff0c;对其运动状态——尤其是姿态——的精确感知是基石。作为飞行控制系统&#xff08;飞控&#xff09;的“内耳”&#xff0c;陀螺仪实时捕捉机体绕X、Y、Z三轴的旋转角速度。这一核心数据是飞控进行姿态解算和维持飞行…

腾讯云拉取docker镜像失败怎么办

ps:我直接按照步骤1和2就解决了 以下内容来自豆包 在腾讯云服务器上拉取 Docker 镜像失败&#xff0c;可以按照以下步骤排查和解决&#xff1a; 一、检查网络连接 确认服务器网络正常 bash ping www.baidu.com # 测试公网连通性如果无法 ping 通&#xff0c;检查服务器防火墙…

Apache FOP实践——pdf模板引擎

文章目录 基本概念设计思想具体实践完整应用 基本概念 Apache FOP&#xff08;Formatting Objects Processor&#xff09;是一个基于Java的开源工具&#xff0c;用于将 XSL-FO&#xff08;XSL Formatting Objects&#xff09; 文档转换为PDF、图像等格式。 设计思想 将内容&…

WebRTC核心组件技术解析:架构、作用与协同机制

引言&#xff1a;WebRTC的技术定位与价值 WebRTC&#xff08;Web Real-Time Communication&#xff09;作为一项开源实时通信标准&#xff0c;已成为浏览器原生音视频交互、P2P数据传输的技术基石。自2011年开源以来&#xff0c;其标准化进程由W3C&#xff08;API层&#xff0…

OmniParser:提升工作效率的视觉界面解析工具

OmniParser&#xff1a;基于视觉的用户界面解析工具在现代软件开发中&#xff0c;用户界面的自动化处理变得愈发重要。OmniParser 是一个强大的工具&#xff0c;旨在将用户界面的截图解析为结构化的、易于理解的元素&#xff0c;从而显著提升了大型语言模型&#xff08;如GPT-4…

C#程序员计算器

使用C#语言编写程序员计算器&#xff0c;使其能够进行加减乘除和与或非等逻辑运算。 calculator.cs 代码如下 using System; using System.Numerics; using System.Globalization;namespace Calculator1 {public enum CalcBase { Bin 2, Oct 8, Dec 10, Hex 16 }public en…

国产音频DA转换芯片DP7361支持192K六通道24位DA转换器

产品概述 DP7361 是一款立体声六通道线性输出的数模转换器&#xff0c;内含插值滤波器、Multi-Bit 数模转换 器、模拟输出滤波器&#xff0c;支持主流的音频数据格式。 DP7361 片上集成线性低通模拟滤波器和四阶 Multi-Bit Δ-∑调制器&#xff0c;能自动检测信号频率和主时钟频…

【C51单片机四个按键控制流水灯】2022-9-30

缘由C51&#xff0c;四个按键控制流水灯-嵌入式-CSDN问答 #include "REG52.h" sbit k1P3^0; sbit k2P3^1; sbit k3P3^2; sbit k4P3^3; unsigned char code lsd[]{127,191,223,239,247,251,253,254};//跑马灯 void jsys(unsigned char y,unsigned char s){unsigned c…

Python 脚本:获取公网 IPv4 和 IPv6 地址

本方案适合拨号宽带网络环境&#xff0c;当检测到公网IP地址变更时&#xff0c;可联动自动触发MQTT消息推送或邮件通知&#xff0c;实现动态IP的实时监控与告警。 0x01 代码import re import time import requestsdef extract_ip(html):"""用正则提取 IP&…

数字化转型-制造业未来蓝图:“超自动化”工厂

超自动化&#xff1a;2040年未来工厂的颠覆性蓝图工业革命250年后的新一轮范式革命 &#xff08;埃森哲&#xff1a;未来的制造&#xff1a;超自动化工厂蓝图有感&#xff09;&#x1f504; 从机械化到超自动化&#xff1a;制造业的第五次进化 自18世纪工业革命始&#xff0c;…

Java 15 新特性解析与代码示例

Java 15 新特性解析与代码示例 文章目录Java 15 新特性解析与代码示例引言1. 密封类&#xff08;Sealed Classes&#xff09;1.1. 什么是密封类&#xff1f;1.2. 为什么使用密封类&#xff1f;1.3. 语法1.4. 与传统方法的对比1.5. 使用场景1.6. 示例&#xff1a;结合模式匹配2.…

Vue 3 入门教程 - 1、基础概念与环境搭建

一、Vue 3 简介 Vue.js 是一款流行的 JavaScript 前端框架&#xff0c;用于构建用户界面。Vue 3 作为其最新版本&#xff0c;带来了诸多令人瞩目的新特性与性能优化&#xff0c;为开发者打造了更为高效、灵活的开发体验。 1.1 Vue 3 的优势 性能提升&#xff1a;对虚拟 DOM …

SpringBoot之多环境配置全解析

SpringBoot之多环境配置全解析一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式&#xff08;传统格式&#xff09;1. 基础配置文件&#xff08;application.properties&#xff09;2. 环境专属配置文件2.2 yaml/yml格式&#xff08;推荐&#xff09;1. 单文…