(C++)C++類和類的方法(基礎教程)(與Python類的區別)

前言:

本篇博客建議搭配:(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?成員 + 類外初始化
訪問控制命名約定 (_,?__)關鍵字 (public,?private)
對象創建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. 單文…