Nasıl C'un temel sınıf kurucularını ve atama operatörü kullanılır ?
Kurucular ve atama operatörü ile B sınıfı var.
class B
{
public:
B();
B(const string & s);
B(const B & b){(*this) = b;};
B & operator= (const B & b);
private:
virtual void foo();
// and other private member variables and functions
}
Sadece işlev foo geçersiz kılacak bir miras D sınıfı oluşturmak istiyorum(), ve başka hiçbir değişiklik gereklidir.
Ama D B olarak kopya Kurucu ve atama operatörü de dahil olmak üzere kurucular aynı şekilde, sahip olmak istiyorum
D(const D & d){(*this) = d;};
D & operator= (const D & d);
D hepsini yazmak zorunda mıyım, ya da B. kurucular ve operatör kullanmak için bir yolu var mı? Özellikle B özel üye değişkenleri erişmek için var çünkü atama operatörü yeniden yazmamak isterdim.
CEVAP
Açıkça yapıcılar ve atama operatörleri arayabilirsiniz:
class Base {
//...
public:
Base(const Base&) { /*...*/ }
Base& operator=(const Base&) { /*...*/ }
};
class Derived : public Base
{
int additional_;
public:
Derived(const Derived& d)
: Base(d) // dispatch to base copy constructor
, additional_(d.additional_)
{
}
Derived& operator=(const Derived& d)
{
Base::operator=(d);
additional_ = d.additional_;
return *this;
}
};
İlginç olan şey bu ise açıkça bu fonksiyonlar daha sonra, derleyici tarafından oluşturulan bu işlevleri kullanır) tanımlamak sormaman bile çalışır.
class ImplicitBase {
int value_;
// No operator=() defined
};
class Derived : public ImplicitBase {
const char* name_;
public:
Derived& operator=(const Derived& d)
{
ImplicitBase::operator=(d); // Call compiler generated operator=
name_ = strdup(d.name_);
return *this;
}
};

Nasıl bir soyut temel sınıf uygulayan ...
Nasıl define_method sınıf yöntemleri o...
Java, nasıl bir temel sınıf'türet...
Nasıl sınıf bir joker birden fazla kav...
Nasıl Denetleyicileri için bir temel s...