30/09/2018, 17:58

Toán tử operator++, Tại sao phải là ++s thì nó mới chạy,còn s++ thì không được

Giả sử mình có đoạn code

#include <iostream>
using namespace std;

class Sample
{
    int point;
public:
    Sample()
    {
        point = 5;
    }
    Sample operator++()
    {
        point++;
        return *this;
    }
    void Display()
    {
        cout << point << endl;
    }
};
int main()
{
    Sample s;
    ++s;
   // s++;
    s.Display();

}

Tại sao phải là ++s thì nó mới chạy,còn s++ thì không được.

Itachi Citus viết 20:11 ngày 30/09/2018

Để định nghĩa toán tử postfix, bạn phải viết thêm một hàm nữa

Sample operator++(int)
{
    Sample temp = *this;
    ++this;
    return temp;
}

http://en.cppreference.com/w/cpp/language/operators

Hai toán tử này là khác nhau và cách thức hoạt động không giống nhau nha bạn. Giờ mới hiểu tại sao Java quyết định không hỗ trợ operator overloading.

.vn viết 20:12 ngày 30/09/2018

Toán tử ++ và –

Đây là hai toán tử một ngôi, hai toán tử này tùy vào vị trí (tiền tố hoặc hậu tố) mà sẽ đưa ra các kết quả khác nhau:

Tiền tố (đứng ngay trước tên biến): tăng (nếu là ++) hoặc giảm (nếu là --) giá trị của biến lên 1 rồi mới thực hiện tính toán trong biểu thức.
Hậu tố (đứng ngay sau tên biến): thực hiện tính toán biểu thức rồi mới tăng (nếu là ++) hoặc giảm (nếu là --) giá trị của biến lên một.
Ta lấy ví dụ sau:

int main()
{
	int x = 10;
	int y = 10;
 
	int a, b;
	a = ++x;	// Tiền tố
	b = y++;	// Hậu tố
 
	cout << "a = " << a << endl;
	cout << "x = " << x << endl;
	cout << "b = " << b << endl;
	cout << "y = " << y << endl;
 
	return 0;
}

Ta có kết quả xuất ra màn hình như sau:

a = 11
x = 11
b = 10
y = 11

Bài liên quan
0