Tạo SecurityEntity trong C++ Winform

viết 1 cái parser để gọi get() set() cũng được vậy, chỉ mất công ghi thêm vài chữ thôi, ví dụ Binding GetParam SetParam v.v… Parser có thể viết được nhưng ở đây nếu làm vậy thì xấu + dài dòng. Có property thì xài property cho ngắn gọn và đẹp thôi?

Hay mỗi lần muốn update lên GUI hay đọc từ GUI xuống lại phải gọi hàm để update.

chỗ này bạn tự trả lời luôn rồi. Xài property thì gọn đẹp. Ko xài property vẫn thực hiện được việc tự động update giá trị từng biến mỗi khi update GUI, nhưng dài dòng và xấu hơn ko cần thiết. Nhưng ko có property thì phải chịu làm như vậy thôi.

Cái em thấy là auto implement property trong C#
https://msdn.microsoft.com/en-us/library/bb384054.aspx
Thực chất nó là thế này:
https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx

Trong C# người ta dùng properties khi field đó luôn cho phép đọc và ghi. Như class em đưa thì em hiểu là ngươi ta cho phép truy cập toàn bộ các field đó(đọc,ghi). từ đó convert sang C++ cho đúng ý nghĩa :Dùng tính đóng gói(Capsolation):get, set bình thường.

"
A property is a member that provides a flexible mechanism to read, write, or compute the value of a private field. Properties can be used as if they are public data members, but they are actually special methods called accessors

Bạn ko hiểu rồi, nó support có nghĩa là t có thể viết tắt, đơn cử là hàm get;set; của C# là trình biên dịch nó hiểu, nhưng ko phải bên ngôn ngữ khác đánh như vậy trình biên dịch ko hiểu thì ko phải property, ngôn ngữ support property ko có nghĩa mấy ngôn ngữ khác ko có property, giống như mình đã nõi, bên c# thì có hàm get;set; còn bên C++ thì ta tạo hàm get;set; :slight_smile:
Property chỉ 1 là cách để bao đóng thuộc tính trong dữ liệu :slight_smile:
Vốn dĩ cái này thuộc về thiết kế hướng đối tượng, theo hướng đối tượng thì đối tượng phải giấu kín thuộc tính của nó, t có thể đóng gọi thuộc tính bằng constructor hay property
Còn bạn nói search property c++ ko ra thì còn mình search keyword “property c++” nó hiện ra quá trời, đương nhiên là nó ko giống kiểu C# rồi
Còn ý mình nói C# làm được C++ làm được là nội dung topic của thớt, C# có thể chuyền thành C++ được, mình xin lỗi vì gây cho bạn hiểu lầm

Bạn ấy ko tin C++ có properties mới buốn chứ :joy:
Cảm ơn bạn đã giúp mình hiểu rõ hơn về properties trong C# :slight_smile:

1 Like

một bênh tập trung vao ý nghĩa của đoạn code để giải quyết vấn đề, môt bên tập trung vào bản chất của ngôn ngữ sử dụng, có mà cãi nhau tới sáng, mặt dù cái nào cũng thấy hay. :D. cho nên mới có câu “đạo bất đồng bất tương vi mưu”.

Khổ nhỉ ?
Cứ cho mình không tin C++ có property. Mà ngay cái link bạn đưa ra để cho mình xem nó cũng nói C++ không có property ?
Mình nhờ bạn chỉ ra property trong C++ nó thể hiện như thế nào và nó khác method ở chỗ nào bạn cũng không chỉ ?
Bạn thì nói mình hiểu nhầm còn bạn không đưa ra cái để mình hiểu. Vậy thì …??

Like cho 2 bên cùng đọc nhé :D, không rành C++
https://msdn.microsoft.com/en-us/library/hh755807.aspx
https://msdn.microsoft.com/en-us/library/2f1ec0b1.aspx

1 Like

C++.NET phải không bạn.

1 Like

Đúng rồi. còn C++ nguyên thủy thi không chắc.:smiley:

C++.NET nó chết toi rồi còn đâu :smiley:
Năm 2013 còn ngáp ngoái cho đến 2015 thì đứt hẳn :innocent:

1 Like

link nói về cái nay đâu chú, đọc phát, không hiểu sao stop nhỉ

Nó có hiệu năng chỉ như C# và phức tạp hơn C# về mặt cú pháp.
Đến năm 2012,2013 thì nó bị ẩn khỏi VS và nếu tạo Project với C++.NET sẽ nhận được thông báo kiểu : “Hãy chuyển qua C# đê. C# làm việc này tốt hơn”.
Đến 2015 thì mặc định không còn có mặt trên VS nữa. Phải cài những bản Update VS về sau này mới có.

1 Like

Hình như bạn ko hiểu ý mình thì phải :slight_smile:
Cái properties bạn nói nó chỉ là cách bao đóng thuộc tính của đối tượng, cái này thuộc về thiết kế hướng đối tượng, thể hiện tính bao đóng, bạn cứ đòi phải get;set; mới là properties
Bạn NguyenCa có nói rồi

A property is a member that provides a flexible mechanism to read, write, or compute the value of a private field. Properties can be used as if they are public data members, but they are actually special methods called accessors

Properties thực chất là 1 phương thức đặc biệt, C++ là 1 ngôn ngữ hướng đối tượng, nên việc sử dụng properties là được, cái này là về THIẾT KẾ HƯỚNG ĐỐI TƯỢNG

Programming languages that support properties include ActionScript 3, C#, D, Delphi/Free Pascal, eC, F#, Kotlin, JavaScript, Objective-C 2.0, Python, Scala, Swift, Lua, and Visual Basic. Some object-oriented languages, such as Java, don’t support properties, and require the programmer to define a pair of accessor and mutator methods instead. Oberon-2 provides an alternative mechanism using object variable visibility flags. Other languages designed for the Java Virtual Machine, such as Groovy, do natively support properties. While C++ doesn’t have first class properties, they can be emulated due to operator overloading. Also note that some C++ compilers support first class properties (the Microsoft C++ compiler as an example).

Cái này bạn đưa ra cho mình, Câu này nó nói C++ ko hỗ trợ nhưng có thể mô phỏng, giống như mình nói bên C# thì có get;set; còn bên C++ thì mình tạo hàm get;set; thế có gì sai sao bạn

Bạn nói properties ko thể sự dụng thay method :slight_smile: Vậy cho mình hỏi viết 1 hàm kiểm trả dữ liệu bên trong mình sử dụng properties đc ko, 1 hàm trả về 1 giá trị nhất định thì mình sài properties được ko, 1 hàm tính tổng số các thuộc tính có giả trị khác null mình sử dụng properties đc ko :slight_smile:

Thôi nhé !
Cứ cho là như bạn nói thì Property chỉ là một cách đóng gói thì những cách đóng gói khác đều như nhau. Tại sao bạn không tự hỏi là viết 2 method đảm nhiệm việc get/set thì hầu như ngôn ngữ nào cũng làm được vậy người ta phải cho ra cái gọi là property để làm cái gì cho nó rắc rối ?
C++ không có property, bạn nói nó có thể mô phỏng. Mà mô phỏng thì chỉ giống vài mặt nào đó. C++ thì có hướng đối tượng, nhưng không hoàn toàn, còn C# thì hoàn toàn hướng đối tượng. Vậy theo bạn mà bàn về OOP thì C++ hay C# chuẩn hơn.
Bạn cứ đụng vào nhiều thứ liên quan nữa rồi xem 2 method và 1 property nó có giống nhau không. Chứ chỉ nhìn việc che dấu với get set thì đương nhiên nó giống nhau rồi thế nên ngay từ đầu bạn có nêu được biểu hiện của property trong C++ khác với method như thế nào đâu ?

Như mình nói, properties chỉ là tên gọi, là 1 cách đóng gói thuộc tính :slight_smile:
Miễn là ngôn ngữ có hỗ trợ hướng đối tượng thì đều sử dụng properties đc cả, chả qua cách biểu diễn khác nhau thôi
Về hướng đối tượng mình ko biết C# hay C++ chuẩn hơn, nhưng từ C# 2.0 thì hàm get;set; là dùng đề lấy hoặc gán giá trị cho 1 thuộc tính private, cũng ko khác gì dùng method để gán cả
Trong javascript cũng có properties, nhưng hoàn toàn ko dùng get;set; như C#, vậy theo bạn thì javascript ko có properties hay sao :slight_smile:

[quote=“rongthhieng1, post:35, topic:27586”]
Như mình nói, properties chỉ là tên gọi, là 1 cách đóng gói thuộc tính :slight_smile:[/quote]
Vậy tức là còn nhiều kiểu đóng gói thuộc tính khác nhau. Các cách đó có giống nhau mọi mặt không ?

[quote=“rongthhieng1, post:35, topic:27586”]
Miễn là ngôn ngữ có hỗ trợ hướng đối tượng thì đều sử dụng properties đc cả, chả qua cách biểu diễn khác nhau thôi[/quote]
Bạn có thể lấy cho mình một ví dụ về property trong C++ rồi bạn nói cho mình nghe property trong C++ khác với method như thế nào?

Tại sao bạn lại cứ nhìn vào get;set (nó không phải gọi là hàm như bạn vẫn nói nãy giờ) trong C# rồi bảo phải có nó mới là property vậy ? Mình có nói với bạn như vậy sao ? Và đương nhiên như thế javascript có property vì người ta thiết kế cho nó có property chứ không phải cứ OOP, Encapsulation là có property.
Mình đã nói ở bài trước rồi, khi bạn chỉ nhìn thấy mỗi cái việc get và set giá trị thôi thì đương nhiên là việc dung 1 property với việc viết 2 cái method để get và set là giống nhau.

C# hướng đối tượng hoàn toàn còn C++ là thằng con lai giữa hướng đối tượng và cấu trúc. Nói vậy chắc bạn biết thằng nào là chuẩn OOP hơn.

Thôi mình mệt bạn quá, đóng gói có nhiều cách, như trong C# mình dùng contructor, method, index, bạn còn hỏi gì ko :slight_smile:
Chuẩn OOP là chuẩn như thế nào, bạn lấy thước đó gì bảo C# chuẩn OOP hơn C++, 4 tính chất cơ bản của OOP thì cả C# và C++ đều có, vậy chuẩn là chuẩn như thế nào :slight_smile:
Còn cái properties bạn nói, như bạn NguyenCa post, thì properties vốn dĩ chỉ là 1 phương thức đặc biệt gọi, vậy thì mình vẫn tạo ra properties được, miễn là ngôn ngữ đó là ngôn ngữ hướng đối tượng :slight_smile:
Bạn nói properties là riêng biệt, khác method, nhưng mình vẫn sài properties trong C# mục đích để kiểm tra dữ liệu, tạo 1 giá trị cố định, đơn giản vì mình thấy sài properties nó đẹp hơn, dễ hiểu hơn sài method :slight_smile:
Và mình nói luôn, cái này liên quan đến THIẾT KẾ HƯỚNG ĐỐI TƯỢNG, bạn ko hiểu thì mình chịu, bạn thích thì tìm hiểu OOSD (thiết kế phần mềm hướng đối tượng) :slight_smile:

Thôi nhọc rồi !
Nếu bạn chuyển được cái đoạn code chứa properties của C# mà chủ bài đã đưa sang C++ mà vẫn giữ được những tính chất của properties như nguyên bản bên C# thì nói chuyện tiếp còn không thì dừng tại đây luôn. Sang C++ dùng mà vẫn giữ được tính chất thì gọi là chuyển. Còn viết lại cho nó going một vài đặc điểm thì miễn bàn tiếp.
Cái lời bạn nói bạn không chứng minh được thì nói nữa cũng thế cả thôi. Mình gặp bạn là đầu tiên khi nói rằng properties để cho nó đẹp và dễ hơn method. Chỉ một đoạn code ngắn và chú thích nó khó vậy sao ?

Còn C# chuẩn OOP hơn C++ mình lấy luôn ví dụ :
C# chỉ kế thừa được từ 1 lớp.
C++ kế thừa được từ nhiều lớp.
=> Bạn có thấy đứa con nào có 2 hay nhiều người cha về mặt sinh học không ?

1 con kế thừa từ cha và mẹ mà? Kế thừa 2 lớp rồi. :joy:

C++ có kế thừa nhiều lớp nhưng ít khi hoặc chả ai sử dụng vì mấy cái lỗi phức tạp khác. Java ko cho kế thừa nhiều lớp luôn vì tính năng ko ai xài, mà tách ra thành interface. C# copy cái hợp lý này từ Java.

#define READ_ONLY 1
#define WRITE_ONLY 2
#define READ_WRITE 3

template <typename Container, typename ValueType, int nPropType>
class properties {
private: 
	Container* m_cObject;
	void (Container::*Set)(ValueType value);
	ValueType(Container::*Get)();
public:
	properties() {
		m_cObject = NULL;
		Set = NULL;
		Get = NULL;
	}
	void setContainer(Container* cObject)
	{
		m_cObject = cObject;
	}
	void setter(void (Container::*pSet)(ValueType value))
	{
		if ((nPropType == WRITE_ONLY) || (nPropType == READ_WRITE))
			Set = pSet;
		else
			Set = NULL;
	}
	void getter(ValueType(Container::*pGet)())
	{
		if ((nPropType == READ_ONLY) || (nPropType == READ_WRITE))
			Get = pGet;
		else
			Get = NULL;
	}
	ValueType operator =(const ValueType& value)
	{		
		(m_cObject->*Set)(value);
		return value;
	}
	operator ValueType()
	{
		return (m_cObject->*Get)();
	}
};

class PropTest
{
public:
	PropTest()
	{
		Count.setContainer(this);
		Count.setter(&PropTest::setCount);
		Count.getter(&PropTest::getCount);
	}
	int getCount()
	{
		return m_nCount;
	}
	void setCount(int nCount)
	{
		m_nCount = nCount;
	}
	properties<PropTest, int, READ_WRITE> Count;


private:
	int m_nCount;
};
int main()
{
	PropTest myProtest;
	myProtest.Count = 5;
	cout << myProtest.Count;
    return 0;
}

Ví dụ về properties trong C++ đây
Bạn hỏi gì nữa ko ???

Còn cái nữa, cái này là kế thừa trong OOP chứ ko phải kế thừa trong sinh học, bạn chịu ko, ngoài đời muốn có con thì phải có cha vs mẹ giống như bạn Regular nói đó
Và mình chả nghe ai nói OOP phải bắt buộc kế thừa từ 1 lớp cha cả, mình chỉ biết ngôn ngữ hướng đối tượng phải có đủ 4 tính chất : trừu tượng, đa hình, kế thừa và bao đóng. C++ và C# đều có tính chất đó.
Mình chả hiểu bạn lấy thước đo nào rồi nói C# chuẩn OPP hơn C++

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?