'vs son s C 'in sabit Java
Java for C programmers tutorial (vurgu benim) diyor ki:
Anahtar kesindirkabaca C sabit eşdeğer
"Kabaca" demek bu bağlamda. Değillertam olarakaynı?
Varsa nelerdir?
CEVAP
C üyesi bir işaretleme işlevi const
const
örnekleri çağırdı olabilir anlamına gelir. Java bu bir eşdeğeri yok. E. g.:
class Foo {
public:
void bar();
void foo() const;
};
void test(const Foo& i) {
i.foo(); //fine
i.bar(); //error
}
Değerler, bir kez, Java, örneğin: daha sonra atanabilir
public class Foo {
void bar() {
final int a;
a = 10;
}
}
Java yasal, ama C ise değil
public class Foo {
void bar() {
final int a;
a = 10;
a = 11; // Not legal, a has already been assigned a value.
}
}
Hem Java hem de C üyesi değişkenlerifinal
/const
sırasıyla olabilir. Bu sınıfın bir örneği inşa ediliyor bittikten sonra bir değer verilmesi gerekir.
Kurucu bitirmeden önce ayarlanması gerekir Java, bu iki yoldan biriyle elde edilebilir:
public class Foo {
private final int a;
private final int b = 11;
public Foo() {
a = 10;
}
}
C başlatma listeler const
üyeleri bir değer vermek için kullanmanız gerekir:
class Foo {
const int a;
public:
Foo() : a(10) {
// Assignment here with = would not be legal
}
};
Java son olmayan geçersiz kılınabilir gibi şeyler işaretlemek için kullanılabilir. C (pre-C 11) Bu yapmaz. E. g.:
public class Bar {
public final void foo() {
}
}
public class Error extends Bar {
// Error in java, can't override
public void foo() {
}
}
Ama C :
class Bar {
public:
virtual void foo() const {
}
};
class Error: public Bar {
public:
// Fine in C
virtual void foo() const {
}
};
bu üye işaretleme semantiği const
farklı işlev çünkü, gayet iyi. (Olabilir deaşırı yüküye fonksiyonları const
tek alarak. (C 11 üye işlevler final, C 11 güncelleme bölümüne bakın) işaretli olmasını sağlar unutmayın
C 11 güncelleme:
C 11 aslında Java da aynı özellik için aynı semantiği ile final
, sınıfları ve üye işlevlerini işaretlemek için Java örnek için izin verir:
public class Bar {
public final void foo() {
}
}
public class Error extends Bar {
// Error in java, can't override
public void foo() {
}
}
Şimdi tam olarak C 11 olarak yazılabilir:
class Bar {
public:
virtual void foo() final;
};
class Error : public Bar {
public:
virtual void foo() final;
};
G 4.7 yayın öncesi bu örnek derlemek zorunda kaldım. Bu durumda const
yerini almaz, ancak yerine, en yakın eşdeğer C kelime ile görülmemiş Java gibi davranışları sağlayan artırmaktadır unutmayın. Eğer öyleyse, eğer bir üye final
const
ikisi de işlevi varsa istediğini yaparsın:
class Bar {
public:
virtual void foo() const final;
};
(const
final
burada gereklidir).
Daha önce fonksiyonlarıvirtual
sigara yapma potansiyel bir seçenek de olsa, derleme zamanında bir hata vermeden olmaz const
üye fonksiyonlar, doğrudan bir eşdeğer yoktu.
Aynı şekilde Java:
public final class Bar {
}
public class Error extends Bar {
}
C 11'de olur:
class Bar final {
};
class Error : public Bar {
};
(Daha önce private
kurucular muhtemelen C bu sana en çok benzeyen kişiydi )
Devam ettirebilmek için ilginç bir şekilde, geriye doğru uyumluluk pre-C 11 kodu final
iledeğilher zamanki gibi bir kelime. (C 98 önemsiz yasal örnek 41 ** bir anahtar sözcük yapma kodu kırmak niye
'vs son s C 'in sabit Java...
Neden Java ile hiç Sabit anahtar var m...
Nasıl Sabit bir java bir açıklama için...
Java, bir tamsayı, ikili biçimde sabit...
Java "-by pass-başvuru" veya...