1. 程式人生 > 其它 >C++ - 程式設計實踐

C++ - 程式設計實踐

opencv影象處理時使用stringstream批量讀取圖片,處理後並儲存

C/C++讀取檔名(Ubuntu)

在Ubuntu系統上需要使用C來獲取指定資料夾下的檔名

https://blog.csdn.net/lsq2902101015/article/details/51373911

https://blog.csdn.net/weixin_41770169/article/details/94566944

C++中如何將string型別轉換為int型別?

#include <string>
#include <sstream>  // 包含標頭檔案

int main()
{
    std::stringstream str2digit;
    std::
string sint='1', sfloat='1.1', sdouble='1.2'; int dint; float dfloat; double ddouble; str2digit << sint; str2digit >> dint; // string to int str2digit.clear(); str2digit << sfloat; str2digit >> dfloat; // string to float str2digit.clear(); str2digit
<< sdouble; str2digit >> ddouble; // string to double std::cout << dint << ", " << dfloat << ", " << ddouble << std::endl; return 0; }

C++遍歷陣列,字串容器

https://blog.csdn.net/hackmind/article/details/24271949

namespace名稱空間

假設這樣一種情況,當一個班上有兩個名叫 Zara 的學生時,為了明確區分它們,我們在使用名字之外,不得不使用一些額外的資訊,比如他們的家庭住址,或者他們父母的名字等等。

同樣的情況也出現在 C++ 應用程式中。例如,您可能會寫一個名為 xyz() 的函式,在另一個可用的庫中也存在一個相同的函式 xyz()。這樣,編譯器就無法判斷您所使用的是哪一個 xyz() 函式。

因此,引入了名稱空間這個概念,專門用於解決上面的問題,它可作為附加資訊來區分不同庫中相同名稱的函式、類、變數等。使用了名稱空間即定義了上下文。本質上,名稱空間就是定義了一個範圍。

C++中this與*this的區別

this *this

return *this返回的是當前物件的克隆或者本身(若返回型別為A, 則是克隆, 若返回型別為A&, 則是本身 )。return this返回當前物件的地址(指向當前物件的指標) 兩個示例如下

#include <iostream>
using namespace std;
 
class A
{
public:
    int x;
    A* get()
    {
        return this;
    }
};
 
int main()
{
    A a;
    a.x = 4;
 
    if(&a == a.get())
    {
        cout << "yes" << endl;
    }
    else
    {
        cout << "no" << endl;
    }
 
    return 0;
}

結果為:yes

#include <iostream>
using namespace std;
 
class A
{
public:
    int x;
    A get()
    {
        return *this; //返回當前物件的拷貝
    }
};
 
int main()
{
    A a;
    a.x = 4;
 
    if(a.x == a.get().x)
    {
        cout << a.x << endl;
    }
    else
    {
        cout << "no" << endl;
    }
 
    if(&a == &a.get())
    {
        cout << "yes" << endl;
    }
    else
    {
        cout << "no" << endl;
    }
 
    return 0;
}

結果為:

4

no

最後, 如果返回型別是A&, 那麼return *this返回的是當前物件本身(也就是其引用), 而非副本。

C++ 指標

int var = 20 宣告一個數值

int *a 宣告一個指標

a = &var // 在指標變數中儲存 var 的地址

cout << *ip 輸出var

operate運算子轉換

c++ const用法

一,const修飾符用於指標

第一種方法是讓指標指向一個常量物件,這樣可以防止使用該指標來修改所指向的值,第二種方法是將指標本身宣告為常量,這樣可以防止改變指標的位置。

宣告一個指向常量的指標a:

int y = 1;

const int * a = &y;

該宣告指出,a指向一個const int,這裡為1,因此不能使用a來修改這個值。換句話說,*a的值為const,不能被修改,但是a的宣告並不意味著它指向的值實際上就是一個常量,而只是意味著對a而言,這個值是常量。a指向y,而y不是const,可以通過y變數來修改y的值,但不能使用a指標來修改。

const int m = 9;

const int * n = &m; // (1)

int * t = &m; //(2)

上面的(1)和(2)中看到了什麼,(2)將const的地址賦給了常規指標,(1)將const地址賦給了const指標,這兩張是否正確呢,答案顯然(2)不對,因為C++禁止將const的地址賦給非const指標,如果非要這樣做,只能使用強制型別轉換來突破這種限制。

行內函數 inline

行內函數一般放在標頭檔案裡面

有時候進出函式的開銷比函式本身還大,所以變為行內函數。用巨集可能會有bug。

static靜態成員

類內靜態成員變數:靜態成員函式主要為了呼叫方便,不需要生成物件就能呼叫。

class X
{
public:
    void MethodA();
    static void MethodB();
}

此時MethodB可以直接呼叫,X::MethodB();

MethodA必須先生成類物件才能呼叫,X x; x.MethodA();