中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

深圳做網(wǎng)站d海淀區(qū)seo引擎優(yōu)化

深圳做網(wǎng)站d,海淀區(qū)seo引擎優(yōu)化,山西長治做網(wǎng)站公司有哪些,戶外旅游網(wǎng)站模板C面向?qū)ο缶幊虒W(xué)習(xí) 前言一、C面向?qū)ο缶幊潭?、知識點(diǎn)學(xué)習(xí)1. 定義一個(gè)類1.1 使用struct定義1.2 使用class定義1.3 struct和class的區(qū)別 2. 類的定義方式2.1 單文件定義(Inline Definition)2.2 分離定義(Separate Definition)2.3 頭…

C++面向?qū)ο缶幊虒W(xué)習(xí)

  • 前言
  • 一、C++面向?qū)ο缶幊?/li>
  • 二、知識點(diǎn)學(xué)習(xí)
    • 1. 定義一個(gè)類
      • 1.1 使用struct定義
      • 1.2 使用class定義
      • 1.3 struct和class的區(qū)別
    • 2. 類的定義方式
      • 2.1 單文件定義(Inline Definition)
      • 2.2 分離定義(Separate Definition)
      • 2.3 頭文件守衛(wèi)
    • 3. 訪問修飾符
    • 4. 構(gòu)造函數(shù)與析構(gòu)函數(shù)
      • 4.1 構(gòu)造函數(shù)(Constructor)
      • 4.2 析構(gòu)函數(shù)(Destructor)
    • 5. this指針
    • 6. 虛函數(shù)
    • 7. 繼承
    • 8. 其余內(nèi)容
  • 總結(jié)


前言

注意:本文只適合有C++基礎(chǔ)的朋友食用!另本文章目的在于記錄學(xué)習(xí)C++面向編程學(xué)習(xí)的過程,會引用到其他人的文章。
推薦文章:【C++核心】一文理解C++面向?qū)ο?#xff08;超級詳細(xì)!)(作者:數(shù)據(jù)知道)


一、C++面向?qū)ο缶幊?/h2>

先由一段C++面向?qū)ο缶幊痰牡淅拇a引入學(xué)習(xí):

#include <iostream>
#include <string>// 基類:Animal
class Animal {
public: // 訪問權(quán)限// 構(gòu)造函數(shù)Animal(std::string name) : name_(name) {}// 虛析構(gòu)函數(shù)virtual ~Animal() {}// 虛函數(shù),用于發(fā)聲virtual void makeSound() const = 0; // 純虛函數(shù)// 打印動物的名字void printName() const {std::cout << "My name is " << name_ << std::endl;}protected:std::string name_; // 動物的名字
};// 派生類(子類):Dog
class Dog : public Animal {
public:// 構(gòu)造函數(shù)Dog(std::string name) : Animal(name) {}// 實(shí)現(xiàn)基類的純虛函數(shù)void makeSound() const override {std::cout << name_ << " says: Bark!" << std::endl;}
};// 派生類:Cat
class Cat : public Animal {
public:// 構(gòu)造函數(shù)Cat(std::string name) : Animal(name) {}// 實(shí)現(xiàn)基類的純虛函數(shù)void makeSound() const override {std::cout << name_ << " says: Meow!" << std::endl;}
};// 函數(shù)模板,用于處理任何類型的Animal
template <typename AnimalType>
void makeAnimalSound(const AnimalType& animal) {animal.makeSound();
}int main() {Dog dog("Rex");Cat cat("Whiskers");dog.printName();dog.makeSound();cat.printName();cat.makeSound();// 使用模板函數(shù)makeAnimalSound(dog);makeAnimalSound(cat);return 0;
}

二、知識點(diǎn)學(xué)習(xí)

1. 定義一個(gè)類

在C++中,structclass關(guān)鍵字都可以用來定義一個(gè)類,但它們在默認(rèn)的訪問權(quán)限上有所不同。以下是使用structclass定義同一個(gè)類的例子:

1.1 使用struct定義

struct MyStruct {int publicData; // 默認(rèn)為publicprivate:int privateData; // 私有成員public:MyStruct(int value) : privateData(value) {}int getPrivateData() const {return privateData;}void setPrivateData(int value) {privateData = value;}private:void privateMethod() {// 私有方法}
};

1.2 使用class定義

class MyClass {int publicData; // 默認(rèn)為privateprivate:int privateData; // 私有成員public:MyClass(int value) : privateData(value) {}int getPrivateData() const {return privateData;}void setPrivateData(int value) {privateData = value;}private:void privateMethod() {// 私有方法}
};

1.3 struct和class的區(qū)別

  • struct中,如果沒有指定訪問修飾符,成員默認(rèn)是public的。
  • class中,如果沒有指定訪問修飾符,成員默認(rèn)是private的。

從C++11起,你可以使用struct來定義一個(gè)簡單的數(shù)據(jù)結(jié)構(gòu)(沒有或很少的行為),而class通常用于定義具有封裝、繼承和多態(tài)特性的對象(強(qiáng)調(diào)一個(gè)類型是具有封裝、繼承和多態(tài)的對象)。然而,這只是一個(gè)編程習(xí)慣上的區(qū)分,技術(shù)上你可以使用任何一個(gè)關(guān)鍵字來定義任何類型的類。

2. 類的定義方式

在C++中,類的定義通常有兩種主要方式:一種是在單個(gè)文件中定義類的全部內(nèi)容,另一種是將類的聲明(通常稱為頭文件)和定義(通常稱為源文件)分開。

  • 單文件定義:通常用于小型項(xiàng)目或簡單的類,其中類的實(shí)現(xiàn)非常簡短,或者為了減少編譯依賴。
  • 分離定義:通常用于大型項(xiàng)目或復(fù)雜的類,其中需要隱藏實(shí)現(xiàn)細(xì)節(jié),提高代碼的可維護(hù)性和可讀性。

2.1 單文件定義(Inline Definition)

在這種方式中,類的定義被直接放在頭文件中,通常是在.h.hpp擴(kuò)展名的文件中。這種方式被稱為內(nèi)聯(lián)定義或頭文件中的定義。

示例:

// MyClass.h
#ifndef MYCLASS_H
#define MYCLASS_Hclass MyClass {
public:void function() {// 實(shí)現(xiàn)細(xì)節(jié)}
private:int data;
};#endif // MYCLASS_H

在這種方式中,每次包含頭文件時(shí),類的定義都會被包含到使用它的每個(gè)源文件中。這可能會導(dǎo)致代碼重復(fù),但可以減少編譯依賴和提高編譯速度。

2.2 分離定義(Separate Definition)

就是類的聲明放在頭文件(.h.hpp),類的(定義)實(shí)現(xiàn)放在源文件(.cpp)。

頭文件( MyClass.h ):

// MyClass.h
#ifndef MYCLASS_H
#define MYCLASS_Hclass MyClass {
public:void function();
private:int data;
};#endif // MYCLASS_H

源文件( MyClass.cpp ):

// MyClass.cpp
#include "MyClass.h"void MyClass::function() {// 實(shí)現(xiàn)細(xì)節(jié)data = 42; // 訪問私有成員
}

在這種方式中,類的實(shí)現(xiàn)被隱藏在源文件中,只有聲明被包含在其他文件中。這樣做的好處是增加了模塊化,減少了重復(fù)代碼,并且使得單個(gè)類的定義更容易維護(hù)。

2.3 頭文件守衛(wèi)

這段代碼是C++預(yù)處理器指令,用于防止頭文件被多次包含,這是一種常見的頭文件保護(hù)技術(shù)。這種技術(shù)被稱為“包含保護(hù)”或“頭文件守衛(wèi)”。下面是每個(gè)指令的解釋:

  1. #ifndef MYCLASS_H - 這個(gè)指令檢查一個(gè)宏(在這個(gè)例子中是MYCLASS_H)是否還未定義。#ifndef是“if not defined”的縮寫。如果MYCLASS_H沒有定義,那么預(yù)處理器會繼續(xù)處理下面的代碼。

  2. #define MYCLASS_H - 這個(gè)指令定義了MYCLASS_H宏。這樣,如果這個(gè)頭文件被包含多次,預(yù)處理器會記住MYCLASS_H已經(jīng)被定義了,并且跳過第二次及后續(xù)的包含。

  3. #endif // MYCLASS_H - 這個(gè)指令標(biāo)記了預(yù)處理?xiàng)l件塊的結(jié)束。#endif指示預(yù)處理器停止處理?xiàng)l件塊。注釋// MYCLASS_H是為了提供額外的信息,說明這個(gè)#endif與哪個(gè)#ifndef配對。這是一個(gè)編程習(xí)慣,有助于在閱讀代碼時(shí)快速識別匹配的指令。

包含保護(hù)的目的是防止頭文件的內(nèi)容被編譯多次,這可能發(fā)生在多個(gè)源文件都包含了同一個(gè)頭文件的情況下。如果沒有包含保護(hù),每次頭文件被包含時(shí),它的代碼都會被重新編譯,這不僅會導(dǎo)致編譯錯(cuò)誤(如重復(fù)定義),還可能降低編譯效率。

例如,如果你有以下頭文件和源文件結(jié)構(gòu):

// MyClass.h
#ifndef MYCLASS_H
#define MYCLASS_Hclass MyClass {// 類的定義
};#endif // MYCLASS_H// main.cpp
#include "MyClass.h"
#include "MyClass.h" // 第二次包含相同的頭文件int main() {MyClass myObject;// 使用myObject
}

在沒有包含保護(hù)的情況下,MyClass的定義會被包含兩次,導(dǎo)致編譯器報(bào)錯(cuò),因?yàn)樗鼑L試定義同一個(gè)類兩次。有了包含保護(hù),預(yù)處理器會識別出第二次包含是重復(fù)的,并忽略它,從而避免編譯錯(cuò)誤。

請注意,#endif指令前的注釋// MYCLASS_H是可選的,但它有助于在閱讀代碼時(shí)快速定位匹配的#ifndef指令。

3. 訪問修飾符

(1)public--------公共的,類外部可以訪問;
(2)protected—保護(hù)的,類外部不可以訪問;
(3)private-------私有的,類外部不能訪問;

解析:

  1. public(公共的)

    • 類外部可以訪問:類的公共成員在定義類的外部是可見的,可以直接通過類的實(shí)例來訪問。
    • 示例
      class MyClass {
      public:int publicData; // 公共成員,可以直接訪問void publicMethod() {} // 公共成員函數(shù),可以直接調(diào)用
      };MyClass obj;
      obj.publicData = 10; // 直接訪問公共成員變量
      obj.publicMethod(); // 直接調(diào)用公共成員函數(shù)
      
  2. protected(保護(hù)的)

    • 類外部不可以訪問:類的受保護(hù)成員在定義類的外部是不可見的,不能直接通過類的實(shí)例來訪問。
    • 但可以在派生類中訪問:如果一個(gè)類派生自具有受保護(hù)成員的基類,那么這些受保護(hù)的成員在派生類中是可見的。
    • 示例
      class Base {
      protected:int protectedData; // 受保護(hù)成員,不能直接訪問
      };class Derived : public Base {
      public:void accessBaseMembers() {protectedData = 20; // 在派生類中可以訪問基類的受保護(hù)成員}
      };Derived obj;
      // obj.protectedData = 20; // 錯(cuò)誤:在類外部不能直接訪問受保護(hù)成員
      obj.accessBaseMembers(); // 正確:通過派生類的公共接口訪問基類的受保護(hù)成員
      
  3. private(私有的)

    • 類外部不能訪問:類的私有成員在定義類的外部是不可見的,不能直接通過類的實(shí)例來訪問。
    • 類內(nèi)部可以訪問:私有成員只能在定義它們的類內(nèi)部被訪問,包括類的成員函數(shù)和友元類或友元函數(shù)。
    • 示例
      class MyClass {
      private:int privateData; // 私有成員,不能直接訪問void privateMethod() {} // 私有成員函數(shù),不能直接調(diào)用public:void publicMethod() {privateData = 30; // 在類內(nèi)部可以訪問私有成員privateMethod(); // 在類內(nèi)部可以調(diào)用私有成員函數(shù)}
      };MyClass obj;
      // obj.privateData = 30; // 錯(cuò)誤:在類外部不能直接訪問私有成員
      // obj.privateMethod(); // 錯(cuò)誤:在類外部不能直接調(diào)用私有成員函數(shù)
      obj.publicMethod(); // 正確:通過公共成員函數(shù)間接訪問私有成員
      

4. 構(gòu)造函數(shù)與析構(gòu)函數(shù)

在C++中,構(gòu)造函數(shù)和析構(gòu)函數(shù)是特殊的成員函數(shù),它們分別用于初始化對象和清理對象使用資源。
構(gòu)造函數(shù):主要作用在于創(chuàng)建對象時(shí)為對象的成員屬性賦值,構(gòu)造函數(shù)由編譯器自動調(diào)用,無須手動調(diào)用。語法格式如下:
構(gòu)造函數(shù)語法:類名(){}

析構(gòu)函數(shù):主要作用在于對象銷毀前系統(tǒng)自動調(diào)用,執(zhí)行一些清理工作。語法格式如下:
析構(gòu)函數(shù)語法: ~類名(){}

4.1 構(gòu)造函數(shù)(Constructor)

構(gòu)造函數(shù)是一種特殊的成員函數(shù),用于創(chuàng)建類的對象時(shí)初始化對象。它具有與類相同的名稱,且沒有返回類型,也不能被聲明為const、volatilestatic。構(gòu)造函數(shù)可以有參數(shù),也可以沒有參數(shù)(無參數(shù)構(gòu)造函數(shù)),可以有多個(gè)構(gòu)造函數(shù)(構(gòu)造函數(shù)重載),以適應(yīng)不同的初始化需求。

特點(diǎn)

  • 沒有返回值,也不拋出異常(除了析構(gòu)函數(shù)外)。
  • 可以有0個(gè)或多個(gè)參數(shù)。
  • 可以有默認(rèn)參數(shù)。
  • 可以被重載以提供不同的初始化方式。

示例

class MyClass {
public:// 無參數(shù)的構(gòu)造函數(shù)MyClass() {// 初始化代碼}// 帶參數(shù)的構(gòu)造函數(shù)MyClass(int value) {// 使用參數(shù)value進(jìn)行初始化}// 帶多個(gè)參數(shù)的構(gòu)造函數(shù)MyClass(int value, const std::string& name) {// 使用參數(shù)value和name進(jìn)行初始化}
};

4.2 析構(gòu)函數(shù)(Destructor)

析構(gòu)函數(shù)是一種特殊的成員函數(shù),用于對象生命周期結(jié)束時(shí)執(zhí)行清理工作。它用于釋放對象在生命周期中分配的資源,如動態(tài)分配的內(nèi)存、文件句柄、網(wǎng)絡(luò)連接等。析構(gòu)函數(shù)的名稱是在類名前加上波浪號(~),且析構(gòu)函數(shù)不能有參數(shù),不能有返回值,也不能被重載。

特點(diǎn)

  • 沒有返回值。
  • 不能帶有參數(shù)。
  • 不能被重載。
  • 一個(gè)類只能有一個(gè)析構(gòu)函數(shù)。

示例

class MyClass {
public:// 構(gòu)造函數(shù)MyClass() {// 分配資源,如動態(tài)內(nèi)存}// 析構(gòu)函數(shù)~MyClass() {// 釋放資源,如動態(tài)內(nèi)存}
};

在上述示例中,當(dāng)使用new創(chuàng)建MyClass對象時(shí),會調(diào)用構(gòu)造函數(shù)進(jìn)行初始化。當(dāng)對象不再需要時(shí),比如超出作用域或者使用delete時(shí),會調(diào)用析構(gòu)函數(shù)進(jìn)行清理。

5. this指針

在C++中,this 指針是一個(gè)特殊的指針,它在每個(gè)非靜態(tài)成員函數(shù)內(nèi)部可用。this 指針指向調(diào)用成員函數(shù)的對象本身,它允許成員函數(shù)訪問對象的數(shù)據(jù)成員和成員函數(shù)。
作用

  1. 訪問對象的成員:成員函數(shù)經(jīng)常需要訪問調(diào)用它的那個(gè)對象的成員變量和其他成員函數(shù)。this 指針使得成員函數(shù)能夠區(qū)分不同的對象,即使它們擁有相同的成員名稱。

  2. 鏈?zhǔn)秸{(diào)用this 指針可以用來返回對象本身,從而實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用。

  3. 區(qū)分成員變量和局部變量:當(dāng)成員函數(shù)中的局部變量與類的成員變量同名時(shí),this 指針可以用來區(qū)分它們。

示例

class MyClass {int value;public:MyClass(int val) : value(val) {}int getValue() const {return value; // 使用this指針訪問成員變量}MyClass& set(int val) { // 成員函數(shù)返回對象的引用this->value = val;return *this; // 使用this指針返回對象本身}void printValue() const {int localValue = 10; // 局部變量int* memVarPtr = &this->value; // 使用this指針區(qū)分成員變量和局部變量int* localVarPtr = &localValue;// 輸出指針地址以區(qū)分成員變量和局部變量std::cout << "Member variable value: " << *memVarPtr << std::endl;std::cout << "Local variable value: " << *localVarPtr << std::endl;}
};int main() {MyClass obj(100);obj.printValue(); // 輸出對象的成員變量和局部變量的值obj.set(200).set(300).set(400); // 鏈?zhǔn)秸{(diào)用std::cout << "Final value: " << obj.getValue() << std::endl; // 輸出最終值return 0;
}

注意事項(xiàng)

  • this 指針在靜態(tài)成員函數(shù)中不可用,因?yàn)殪o態(tài)成員函數(shù)不依賴于具體的對象實(shí)例。
  • this 指針在普通成員函數(shù)中是隱式定義的,不需要聲明。
  • this 指針通常不需要手動管理,但了解其存在和作用對于編寫更清晰和更有效的代碼是有幫助的。
  • 在異常情況下,如果成員函數(shù)被非法調(diào)用(例如,在一個(gè)未初始化的對象上),this 指針可能不是一個(gè)有效的指針,因此在處理異常和錯(cuò)誤時(shí)需要小心。

6. 虛函數(shù)

語法格式:

virtual ReturnType FunctionName(Parameters) {// 函數(shù)實(shí)現(xiàn)
}

這里的virtual關(guān)鍵字告訴編譯器這個(gè)函數(shù)是虛函數(shù),可以被子類重寫。

當(dāng)通過基類指針或引用調(diào)用虛函數(shù)時(shí),如果對象實(shí)際是派生類的實(shí)例,那么將調(diào)用派生類中的版本,這就是多態(tài)。如果對象是基類實(shí)例,則調(diào)用基類中的版本。

例如:

class Base {
public:virtual void show() {cout << "Base class show()" << endl;}
};class Derived : public Base {
public:void show() override { // C++11中引入了override關(guān)鍵字來明確指出函數(shù)重寫了基類中的虛函數(shù)cout << "Derived class show()" << endl;}
};int main() {Base* b;Derived d;b = &d; // 基類指針指向派生類對象b->show(); // 輸出Derived class show(),展示了多態(tài)性return 0;
}

在這個(gè)例子中,盡管b是基類Base的指針,但由于它指向的是派生類Derived的對象,所以調(diào)用的實(shí)際上是Derived類中的show方法。

7. 繼承

語法:class A : public B;
MyFrame::MyFrame() 表示MyFrame()是MyFrame的構(gòu)造函數(shù)。
繼承的主要優(yōu)點(diǎn)包括:

  1. 代碼重用:可以減少代碼冗余,提高開發(fā)效率。
  2. 擴(kuò)展性:可以基于現(xiàn)有的類進(jìn)行擴(kuò)展,增加新的功能。
  3. 維護(hù)性:修改基類會影響到所有派生類,簡化了維護(hù)工作。

在C++中,繼承是通過在類定義時(shí)使用:和繼承類型關(guān)鍵字(如public, protected, private)來實(shí)現(xiàn)的。例如:

class Base {
public:void show() {cout << "Base class show()" << endl;}
};class Derived : public Base { // 使用public繼承
public:void display() {cout << "Derived class display()" << endl;}
};int main() {Derived d;d.show(); // 繼承自Base類的show方法d.display(); // Derived類特有的display方法return 0;
}

在這個(gè)例子中,Derived類通過public關(guān)鍵字繼承了Base類。這意味著Derived類的對象可以訪問Base類中所有公有的成員。

繼承類型關(guān)鍵字決定了基類成員在派生類中的訪問級別:

  • public繼承:基類中的公有成員和保護(hù)成員在派生類中仍然是公有的和保護(hù)的。
  • protected繼承:基類中的公有成員和保護(hù)成員在派生類中都變成保護(hù)的。
  • private繼承:基類中的公有成員和保護(hù)成員在派生類中都變成私有的。

8. 其余內(nèi)容

推薦文章:【C++核心】一文理解C++面向?qū)ο?#xff08;超級詳細(xì)!)(作者:數(shù)據(jù)知道)


總結(jié)

本來學(xué)的C++沒有學(xué)到面向?qū)ο缶幊踢@塊,應(yīng)為主要用來刷算法題,但由于最近一個(gè)項(xiàng)目學(xué)習(xí)需要到此方面知識,故來學(xué)習(xí)一下。

http://www.risenshineclean.com/news/52822.html

相關(guān)文章:

  • 全國建筑業(yè)四庫一平臺seo專業(yè)學(xué)校
  • 網(wǎng)站功能模塊設(shè)計(jì)中國新聞
  • 網(wǎng)站制作 網(wǎng)站建設(shè)百度推廣怎么優(yōu)化
  • 可信網(wǎng)站標(biāo)志上海網(wǎng)站快速排名提升
  • 商標(biāo)注冊號在哪個(gè)位置seo優(yōu)化行業(yè)
  • 濟(jì)南微網(wǎng)站建設(shè)網(wǎng)絡(luò)營銷的三種方式
  • dede免費(fèi)模板教育網(wǎng)站百度客服24小時(shí)人工電話
  • wordpress仿簡書抖音seo是什么意思
  • 分辨率大于1920的網(wǎng)站怎么做建立網(wǎng)站的主要步驟
  • 做網(wǎng)站都需要考慮哪些seo百度seo排名優(yōu)化軟件
  • 網(wǎng)站 昆明友情鏈接網(wǎng)站源碼
  • 互聯(lián)網(wǎng)系統(tǒng)安卓手機(jī)優(yōu)化大師官方下載
  • wordpress themas網(wǎng)頁關(guān)鍵詞優(yōu)化軟件
  • 成都 企業(yè) 網(wǎng)站制作去哪里找需要推廣的app
  • 賣書網(wǎng)站開發(fā)的背景湖南長沙今日疫情
  • 智慧管網(wǎng)建設(shè)方案網(wǎng)站seo分析工具
  • wordpress廣告欄沈陽seo排名外包
  • cvm可以做網(wǎng)站服務(wù)器嗎seo優(yōu)化師培訓(xùn)
  • 有哪些網(wǎng)站是可以做宣傳的朔州seo
  • 騰訊云服務(wù)器做網(wǎng)站網(wǎng)站建設(shè)總結(jié)
  • 自己做網(wǎng)站 需要哪些私人做網(wǎng)站
  • 東莞抖音推廣合作上海網(wǎng)站快速排名優(yōu)化
  • 怎么做網(wǎng)頁快360優(yōu)化大師官網(wǎng)
  • 網(wǎng)站后臺的形成有做網(wǎng)站的嗎
  • 邯鄲新聞網(wǎng)今日頭條seo快速排名軟件網(wǎng)址
  • 武漢網(wǎng)站制作服務(wù)百度官網(wǎng)認(rèn)證免費(fèi)
  • 網(wǎng)站建設(shè)學(xué)習(xí)流程seo查詢在線
  • 正規(guī)外貿(mào)網(wǎng)站建設(shè)公司百度老年搜索
  • 有域名就可以做網(wǎng)站么網(wǎng)上做廣告宣傳
  • 黃岡網(wǎng)站制作營銷宣傳方式有哪些