1. Các hàm thành viên trong Class
- Simple functions
- Static functions
- Const functions
- Inline functions
- Friend functions
1.1 Hàm đơn giản
Khai báo giống như 1 hàm bình thường.
[Kiểu trả về] [tên hàm] (tham số)
{
//thân hàm
}
vi du:
void Neb {
cout<<" Neb is handsome!";
}
1.2 Static function
1.5 Friend function
Friend function không phải là một thành viên của class. Như đã biết các class,hàm bên ngoài
không thể truy cập vào thành viên private... Do đó friend function được ra đời.
Mục đích là để giúp truy cập vào đối tượng private.
Ta có thể định nghĩa 1 hàm gobal như friend hay 1 thàm thành viên của class khác là friend.
Ví dụ
class WithFriend
{
int i;
public:
friend void fun(); // global function as friend
};
void fun()
{
WithFriend wf;
wf.i=10; // access to private data member
cout << wf.i;
}
int main()
{
fun(); //Can be called directly
}
--- Cách 2
Khi cấu hình 1 class là friend thì tất cả các hàm thành viên sẽ tự động trở thành hàm bạn...
class Other
{
void fun();
};
class WithFriend
{
private:
int i;
public:
void getdata(); // Member function of class WithFriend
// making function of class Other as friend here
friend void Other::fun();
// making the complete class as friend
friend class Other;
};
2. Static Keyword
2.1 Static function
class COGE {
private:
int x; //data member
public:
int y;
static void fun() {
//x = 1; //error
y = 1;
cout<<"Neb";
}
void f() {
//x = 1; //error,khong thể
y = 1;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
//void COGE::f(); //error,may not define outside of class
COGE::fun();
COGE obj1;
COGE obj2.
cout<<obj1.fun();
cout<<obj2.fun();
system("pause");
return 0;
}
Cả 2 objects đều dùng chung 1 hàm fun() => Dùng static để đỡ phải khai báo 2 hàm.
Chú ý: Hàm static không thể truy cập vào data members và member function.
Chỉ có static data hoặc static function thôi.
2.2 Static data member
- Chia sẻ với tất cả các đối tượng.Và nó chỉ được lưu trữ 1 lần,do đó nó không hề copy riêng biệt cho mỗi đối tượng như
các biến thông thường.
- Biến static member (data members) không được khởi tạo bằng Constructor,bởi vì không có sự khởi tạo đối tượng.
- Nó có thể được khởi tạo giá trị bên ngoài class. Nếu không khởi tạo Linker sẽ báo lỗi.
- Một khi đã định nghĩa giá trị cho biến static,sau đó ra không thể khởi tạo lại giá trị cho biến nữa.
Vậy khi nào cần sử dụng?
Khi mà tất cả các đối tượng đều truy cập chung vào 1 biến . Thì ta nên sử dụng static.
Nếu không dùng static,thì mỗi đối tượng sẽ gọi 1 lần hàm COnstructor => Lãng phí hơn so với gọi 1 biến tĩnh.
Ví dụ:
class X
{
public:
static int i;
X()
{
// construtor
};
};
int X::i=1;
int main()
{
X obj;
cout << obj.i; // in ra 10
}
2.3 Static Class Object
- Static objects cũng được khởi tạo bằng Constructor như các Objects bình thường.
- Lifetime của static Object là khi kết thúc chương trình. Ví dụ dưới sec chứng minh rằng hàm Destructor
không được gọi khi ra khỏi if{} và đến tận lúc kết thúc chương trình...
Ví dụ:
class Abc
{
int i;
public:
Abc()
{
i=0;
cout << "constructor";
}
~Abc()
{
cout << "destructor";
}
};
void f()
{
static Abc obj;
}
int main()
{
int x=0;
if(x==0)
{
f();
}
cout << "END";
}// gọi hàm hủy ở đây
OUTPUT
constructor END destructor
Không có nhận xét nào:
Đăng nhận xét