25/05/2018, 13:03

Đối có giá trị mặc định

Một trong các khả năng mạnh của C++ là nó cho phép xây dựng hàm với các đối có giá trị mặc định. Thông thường số tham số trong lời gọi hàm phải bằng số đối của hàm. Mỗi đối sẽ được khởi gán giá trị theo tham số tương ứng của nó. Trong C++ cho ...

Một trong các khả năng mạnh của C++ là nó cho phép xây dựng hàm với các đối có giá trị mặc định. Thông thường số tham số trong lời gọi hàm phải bằng số đối của hàm. Mỗi đối sẽ được khởi gán giá trị theo tham số tương ứng của nó. Trong C++ cho phép tạo giá trị mặc định cho các đối. Các đối này có thể có hoặc không có tham số tương ứng trong lời gọi hàm. Khi không có tham số tương ứng, đối được khởi gán bởi giá trị mặc định.

Hàm delay với đối số mặc định được viết theo một trong 2 cách sau:

Cách 1 (Không khai báo nguyên mẫu):

void delay(int n=1000)

{

for (int i=0 ; i<n ; ++i)

;

}

Cách 2 (Có khai báo nguyên mẫu):

void delay(int n=1000) ;

void delay(int n)

{

for (int i=0 ; i<n ; ++i)

;

}

Cách dùng:

+ Cung cấp giá trị cho đối n (Có tham số trong lời gọi hàm)

delay(5000) ; // Đối n = 5000

+ Sử dụng giá trị mặc định của đối (Không có tham số trong lời gọi)

delay() ; // Đối n = 1000

+ Các đối mặc định cần phải là các đối cuối cùng tính từ trái sang phải. Giả sử có 5 đối theo thứ tự từ trái sang phải là

d1, d2, d3, d4, d5

Khi đó:

nếu một đối mặc định thì phải là d5

nếu hai đối mặc định thì phải là d4, d5

nếu ba đối mặc định thì phải là d3, d4, d5

...

Các ví dụ sai:

d3 và d5 mặc định (khi đó d4 cũng phải mặc định)

d3 và d4 mặc định (khi đó d5 cũng phải mặc định)

+ Khi xây dựng hàm, nếu sử dụng khai báo nguyên mẫu, thì các đối mặc định cần được khởi gán trong nguyên mẫu, ví dụ:

// Khởi gán giá trị cho 3 đối mặc định d3, d4 và d5)
    void f(int d1, float d2, char *d3=”HA NOI”, 
    int d4 = 100, double d5=3.14) ;
    void f(int d1, float d2, char *d3, int d4, double d5)
    {
    // Các câu lệnh trong thân hàm
    }
    

Không được khởi gán lại cho các đối mặc định trong dòng đầu của định nghĩa hàm. Nếu vi phạm điều này thì Chương trình dịch sẽ thông báo lỗi.

+ Khi xây dựng hàm, nếu không khai báo nguyên mẫu, thì các đối mặc định được khởi gán trong dòng đầu của định nghĩa hàm, ví dụ:

// Khởi gán giá trị cho 3 đối mặc định d3, d4 và d5)
    void f(int d1, float d2, char *d3=”HA NOI”, 
    int d4 = 100, double d5=3.14) 
    {
    // Các câu lệnh trong thân hàm
    }
    

+ Giá trị dùng để khởi gán cho đối mặc đinh

Có thể dùng các hằng, các biến toàn bộ, các hàm để khởi gán cho đối mặc định, ví dụ:

int MAX = 10000;
    void f(int n, int m = MAX, int xmax = getmaxx(), 
    int ymax = getmaxy() ) ;
    

Lời gọi hàm cần viết theo quy định sau:

Các tham số thiếu vắng trong lời gọi hàm phải tương ứng với các đối mặc định cuối cùng (tính từ trái sang phải).

Nói cách

0