OOP筆記 (二)

OOP筆記 (二)

1.const用法

https://www.cnblogs.com/happying30/p/9350712.html
const的意思可以概括爲 “一個不能被改變的普通變量” ,使得const在一定程度上提高程序的安全性和可靠性。

1)普通用法

int const size;
const int size;

這兩條語句都是把size聲明爲一個整數,他的值不能被修改。
錯誤用法:

const int size =10char buffer[size]; 

錯誤在於,size佔用某內存塊,C編譯器不知道它在編譯的值

2)用於指針

用法一:

const int *p;
int const *p;         //含義是指向常量的指針,指針的常量值不可以修改

兩者相同,p是一個指向整形常亮的指針,可以修改指針的值,但不能修改指針所指向的值。

int b = 5int c = 3const int *p=&b;
*p=6//錯誤,不能通過指針修改所指向的值;
p=&c;    //正確,可以修改指針的值 

用法二:

int * const p;   //含義是常量指針,p的值不可以修改

p是一個指針,指針p是常量,它的值無法修改,但是可以修改p所指向的整型的值。

int b = 5int c = 3int *const p = &b;
*p = 6;  //正確,可以修改指針所值向的值
p =&c;   //錯誤,不可以修改指針的值 

簡單的判斷的方法:
如果const在 * 的左側,則const用來修飾指針所指向的變量,即指針指向位常量;
如果const位於 * 的右側,則const就是修飾指針本身,即指針本身就是常量。

3)在這裏插入圖片描述

4) const與引用(常引用)


不能修改常引用變量

2.函數重載

函數的重載指的是兩個以上的函數,具有相同的函數名,但是形參的個數或者類型不同,編譯器根據實參和形參的類型及個數的最佳匹配,自動確定調用哪一個函數,這就是函數的重載。

#include<iostream>
using namespace std;
int abc(int a, int b)
{
    int sum;
    sum = a + b;
    return sum;
}
float abc(float a, float b)
{
    float sum;
    sum = a + b;
    return sum;
}

4.函數的缺省參數

c++允許在函數的原型或定義中給出一個或多個參數指定缺省(默認)初值。定義函數時可以讓最右邊的連續若干個參數有缺省值。
例:

void f1(float,int b,int c=0,char d);
//參數d沒有缺省值,錯誤

5.內存動態分配

http://c.biancheng.net/view/206.html
數組的長度是預先定義好的,在整個程序中固定不變。C++ 不允許定義元素個數不確定的數組。但是在實際的編程中,往往會出現所需的內存空間大小取決於實際要處理的數據多少,而實際要處理的數據數量在編程時無法確定的情況。如果總是定義一個儘可能大的數組,又會造成空間浪費。何況,這個“儘可能大”到底應該多大才夠呢?

爲了解決上述問題,C++ 提供了一種“動態內存分配”機制,使得程序可以在運行期間,根據實際需要,要求操作系統臨時分配一片內存空間用於存放數據。此種內存分配是在程序運行中進行的,而不是在編譯時就確定的,因此稱爲“動態內存分配”.
在 C++ 中,通過 new 運算符來實現動態內存分配。new 運算符的第一種用法如下:

T *p = new T;

其中,T 是任意類型名,p 是類型爲 T* 的指針。
這樣的語句會動態分配出一片大小爲 sizeof(T) 字節的內存空間,並且將該內存空間的起始地址賦值給 p。例如:

int* p;
p = new int;
*p = 5;

第二行動態分配了一片 4 個字節大小的內存空間,而 p 指向這片空間。通過 p 可以讀寫該內存空間。

new 運算符還有第二種用法,用來動態分配一個任意大小的數組:

T *p =new T[N];

其中,T 是任意類型名,p 是類型爲 T* 的指針,N 代表“元素個數”,可以是任何值爲正整數的表達式,表達式中可以包含變量、函數調用等。這樣的語句動態分配出 N × sizeof(T) 個字節的內存空間,這片空間的起始地址被賦值給 p。例如:

int* pn;
int i = 5 ;
pn = new int[i*20];
pn[0] = 20 ;
pn[100] = 30;

最後一行編譯時沒有問題,但運行時會導致數組越界。因爲上面動態分配的數組只有 100 個元素,pn[100] 已經不在動態分配的這片內存區域之內了。

程序從操作系統動態分配所得的內存空間在使用完後應該釋放,交還操作系統,以便操作系統將這片內存空間分配給其他程序使用。C++ 提供 delete 運算符,用以釋放動態分配的內存空間。delete 運算符的基本用法如下:

delete p;

如果是用 new 的第二種用法分配的內存空間,即動態分配了一個數組,那麼釋放該數組時,應以如下形式使用 delete 運算符:

delete[] p;

p 依然是指向動態分配的內存的指針。例如:

int* p = new int[20];
p[0] = 1;
delete[] p;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章