2012-05-16 34 views
8

C'deki operatörlerin (karşılaştırma operatörleri gibi) aşırı yüklenmesi mümkün mü?C'deki operatörleri aşırı yüklemek mümkün mü?

Eğer öyleyse, nasıl yapıyorsunuz? Hızlı arama yaptım, ancak bulduğum her şey C++ içindi ve benim istediğim şey şu: C.

Herhangi bir fikri olan var mı?

Düzenleme1: Buradaki fikir şudur: Bir yapım var ve bir karşılaştırma yapmam gerekiyor (yapının bir üyesine göre). Ve bunun için operatörleri yeni "veri tipim" ile karşılaştırmak istiyorum.

Düzenleme2: Operatör aşırı yüklemesini kullanmadan yapabileceğimin tamamen farkındayım, ancak bunu ANCAK İLE YAPABİLİRSİNİZ diye merak ettim.

Yanıt: Aşırı yük kavramı, nesne yönelimli programlama ile ilişkilidir. C nesne yönelimli olmadığından ve bu nedenle aşırı yük kavramını içeremediğinden. (.:.

+1

Bunu C: struct A'da yapmayı tercih ederim; _Bool A_compare (const struct * A, const struct * A); – xis

+0

Biliyorum. Mümkünse operatörleri kullanmak isterim. – Richard

+0

Operatörün aşırı yüklenmesini istiyorsanız, C++ –

cevap

18

Hayır, bu mümkün değildir C operatör desteklemediği gibi

+0

Bu şekilde göz önüne alındığında, operatör belirli bir işlev türü değil midir? – Richard

+2

C'deki aşırı yük fonksiyonları ile ne demek istiyorsunuz? C, fonksiyon aşırı yüklenmesini desteklemez. – xis

+1

@ xis19 Hayır, benim hatam değil. Richard: C++ 'da, operatörler fonksiyonlara çok benziyor ve aşırı yüklenmiş operatörleri tanımlamak, işlevleri tanımladığınızla aynı şekilde yapılır. – meagar

5

aşırı tarafından varsa, kullanıcı tanımlı operatör aşırı yüklenmeleri anlamına ardından cevap hayır Ancak, bu tür gibi önceden tanımlı operatörler bazılarıdır. * vb + aritmetik türleri için (bunu düşünmek ise) aşırı yüklü. o da de-referans işaretçiler için bir aşırı beri * özeldir.

+0

Birden fazla * ve dizgi * farklıdır. Bence aşırı yüklenmiyorlar. – xis

+3

'*' gerçekten bu kadar özel değil. Aynı isimle bir ikili, diğeri tek, iki ayrı operatör vardır. Aynı şey, örneğin, & ile de olur. Her iki durumda da, tek ve ikili operatörler ilgisizdir. –

+0

Evet, farklılar. Bu yüzden '' '' nin özel olduğunu ve aşırı yüklenmediğini söyledim. – dirkgently

3

C operatörleri veya fonksiyonlarının aşırı yüklenmesini desteklemez. <, <=,'ü yeniden tanımlamanın hiçbir yolu yoktur. Yapı türlerini doğrudan karşılaştırmak için, >=, == veya !=.

İlgili konular