自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python到C++:函數(shù)與面向?qū)ο缶幊蹋∣OP)

開發(fā) 前端
在這篇文章中,我們探討了 C++ 中函數(shù)的定義與返回值、參數(shù)傳遞方式、構(gòu)造函數(shù)、析構(gòu)函數(shù)、繼承和多態(tài)等重要概念。C++ 提供了更高效和靈活的內(nèi)存控制,使得它在性能要求較高的場合比 Python 更具優(yōu)勢。

1.函數(shù)與返回值

在 C++ 中,函數(shù)是程序中的基本單位。每個(gè)函數(shù)都擁有返回類型、函數(shù)名和參數(shù)列表,函數(shù)執(zhí)行后返回相應(yīng)的結(jié)果。

1.1 C++ 函數(shù)定義與返回值

示例:

#include <iostream>
using namespace std;

// 定義一個(gè)簡單的函數(shù),返回兩個(gè)數(shù)的和
int add(int a, int b) {
    return a + b;  // 返回兩數(shù)之和
}

int main() {
    int result = add(10, 20);  // 調(diào)用 add 函數(shù)
    cout << "Sum: " << result << endl;
    return 0;
}

解析:

返回類型int 表示該函數(shù)返回一個(gè)整數(shù)。

函數(shù)定義add 函數(shù)接收兩個(gè)整數(shù)參數(shù),計(jì)算它們的和并返回結(jié)果。

函數(shù)調(diào)用:在 main() 函數(shù)中調(diào)用 add,并將結(jié)果存儲到 result 變量中。

1.2 函數(shù)傳參方式

C++ 支持三種傳遞參數(shù)的方式:按值傳遞、按引用傳遞和按指針傳遞。

1.2.1 按值傳遞(傳遞副本)

函數(shù)接收參數(shù)的副本,修改副本不會影響原始數(shù)據(jù)。

#include <iostream>
using namespace std;

void addValue(int x) {
    x += 10;  // 修改副本
}

int main() {
    int a = 5;
    addValue(a);  // 傳遞 a 的副本
    cout << "a = " << a << endl;  // a 不變,仍然是 5
    return 0;
}

1.2.2 按引用傳遞(傳遞地址)

通過引用傳遞參數(shù),函數(shù)直接修改原始數(shù)據(jù)。

#include <iostream>
using namespace std;

void addReference(int& x) {
    x += 10;  // 修改原數(shù)據(jù)
}

int main() {
    int a = 5;
    addReference(a);  // 傳遞 a 的引用
    cout << "a = " << a << endl;  // a 被修改,結(jié)果為 15
    return 0;
}

1.2.3 按指針傳遞(通過指針傳遞地址)

使用指針傳遞參數(shù),函數(shù)通過指針修改數(shù)據(jù)。

#include <iostream>
using namespace std;

void addPointer(int* x) {
    *x += 10;  // 通過指針修改數(shù)據(jù)
}

int main() {
    int a = 5;
    addPointer(&a);  // 傳遞 a 的地址
    cout << "a = " << a << endl;  // a 被修改,結(jié)果為 15
    return 0;
}

2. 面向?qū)ο缶幊蹋∣OP)

C++ 是一種支持面向?qū)ο缶幊蹋∣OP)的語言,它通過封裝、繼承和多態(tài)來提供強(qiáng)大的結(jié)構(gòu)化設(shè)計(jì)能力。

2.1 類與構(gòu)造函數(shù)

C++ 中的類與 Python 類似,類成員包含數(shù)據(jù)和方法。構(gòu)造函數(shù)用于初始化對象。

C++ 類與構(gòu)造函數(shù)示例:

#include <iostream>
using namespace std;

class Person {
public:
    string name;
    int age;

    // 構(gòu)造函數(shù)
    Person(string n, int a) {
        name = n;
        age = a;
        cout << "Constructor called!" << endl;
    }

    void introduce() {
        cout << "My name is " << name << " and I am " << age << " years old." << endl;
    }

    ~Person() {  // 析構(gòu)函數(shù)
        cout << "Destructor called!" << endl;
    }
};

int main() {
    // 創(chuàng)建對象時(shí)自動調(diào)用構(gòu)造函數(shù)
    Person p1("John", 25);
    p1.introduce();  // 調(diào)用成員函數(shù)

    return 0;  // 程序結(jié)束時(shí)自動調(diào)用析構(gòu)函數(shù)
}
// 輸出
Constructor called!
My name is John and I am 25 years old.
Destructor called!

解析:

構(gòu)造函數(shù)Person(string n, int a) 初始化 name 和 age 成員。

析構(gòu)函數(shù)~Person() 是析構(gòu)函數(shù),當(dāng)對象生命周期結(jié)束時(shí)自動調(diào)用,用于清理資源。

成員函數(shù)introduce 輸出對象的屬性。

2.2 繼承

繼承是 OOP 的核心概念之一,它允許子類繼承父類的成員函數(shù)和數(shù)據(jù)成員,從而實(shí)現(xiàn)代碼復(fù)用。

C++ 繼承示例:

#include <iostream>
using namespace std;

// 基類
class Animal {
public:
    void speak() {
        cout << "Animal speaks!" << endl;
    }
};

// 派生類
class Dog : public Animal {
public:
    void speak() {
        cout << "Dog barks!" << endl;
    }
};

int main() {
    Animal a;
    Dog d;

    a.speak();  // 調(diào)用基類的函數(shù)
    d.speak();  // 調(diào)用派生類的函數(shù)

    return 0;
}
// 輸出
Animal speaks!
Dog barks!

解析:

基類 Animal:提供了 speak() 函數(shù)。

派生類 Dog:繼承了 Animal 類并重寫了 speak() 函數(shù)。

多態(tài)性:C++ 允許我們通過基類指針或引用調(diào)用派生類的方法,具體調(diào)用哪個(gè)版本的函數(shù)取決于對象的實(shí)際類型。

2.3 多態(tài)

多態(tài)是 C++ 中的一項(xiàng)強(qiáng)大特性,它允許同一個(gè)接口以不同的方式進(jìn)行操作。

C++ 多態(tài)示例:

#include <iostream>
using namespace std;

class Animal {
public:
    virtual void speak() {  // 使用 virtual 關(guān)鍵字聲明虛函數(shù)
        cout << "Animal speaks!" << endl;
    }
};

class Dog : public Animal {
public:
    void speak() override {
        cout << "Dog barks!" << endl;
    }
};

int main() {
    Animal * animalPtr;
    Dog dog;

    animalPtr = &dog;
    animalPtr->speak();  // 動態(tài)綁定,調(diào)用 Dog 類的 speak

    return 0;
}
// 輸出
Dog barks!

解析:

虛函數(shù):基類中的 speak() 被聲明為 virtual,這使得 C++ 能夠根據(jù)對象的實(shí)際類型決定調(diào)用哪個(gè)函數(shù)。

動態(tài)綁定:通過基類指針 animalPtr 指向 Dog 對象時(shí),調(diào)用 speak() 會調(diào)用 Dog 類中的 speak() 函數(shù)。

注意

如果運(yùn)行彈出警告如下:
tem.cpp:13:18: warning: 'override' keyword is a C++11 extension [-Wc++11-extensions]
   13 |     void speak() override {
      |                  ^
1 warning generated.
修復(fù)

What is a C++11 extension [-Wc++11-extensions]https://stackoverflow.com/questions/45291142/what-is-a-c11-extension-wc11-extensions

如果使用Code Runner,添加配置如下:

圖片圖片

如果是命令行運(yùn)行,添加參數(shù) -std=c++17

g++ -std=c++17 tem.cpp -o tem

3. 總結(jié)

在這篇文章中,我們探討了 C++ 中函數(shù)的定義與返回值、參數(shù)傳遞方式、構(gòu)造函數(shù)、析構(gòu)函數(shù)、繼承和多態(tài)等重要概念。C++ 提供了更高效和靈活的內(nèi)存控制,使得它在性能要求較高的場合比 Python 更具優(yōu)勢。

C++ 的優(yōu)勢:

性能:C++ 提供直接的內(nèi)存訪問,適合對性能要求高的系統(tǒng)(如操作系統(tǒng)、游戲引擎等)。

底層控制:C++ 對內(nèi)存管理有更細(xì)粒度的控制,允許開發(fā)者優(yōu)化內(nèi)存使用。

多態(tài)與繼承:C++ 通過虛函數(shù)和繼承提供強(qiáng)大的面向?qū)ο竽芰Α?/span>

責(zé)任編輯:武曉燕 來源: 不止于python
相關(guān)推薦

2024-01-03 13:38:00

C++面向?qū)ο缶幊?/a>OOP

2020-07-24 09:40:04

C語言OOP代碼

2011-04-02 09:07:46

OOP

2024-01-08 07:02:48

數(shù)據(jù)設(shè)計(jì)模式

2010-01-20 09:48:44

面向?qū)ο?/a>

2011-07-14 17:37:02

C++面向?qū)ο缶幊趟枷?/a>

2011-07-14 17:24:10

C++面向?qū)ο笏枷?/a>

2024-04-28 11:01:27

C++編程語言函數(shù)

2009-12-22 01:54:50

C++之父Bjarne Stro

2010-02-06 09:31:42

C++函數(shù)對象

2023-11-02 07:55:31

Python對象編程

2023-02-16 09:55:24

對象編程OOP

2019-03-26 10:50:22

Python面向?qū)ο?/a>編程語言

2023-01-10 09:06:17

2023-12-11 15:32:30

面向?qū)ο缶幊?/a>OOPpython

2010-01-25 09:50:58

C++函數(shù)對象

2011-05-25 11:15:02

Javascript繼承

2010-01-13 14:05:55

C++語言

2017-04-21 09:07:39

JavaScript對象編程

2012-01-17 09:34:52

JavaScript
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號