Çözüldü C++ ana sınıftan türetilen sınıfın elemanlarına erişilebilir mi?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Katılım
1 Ekim 2017
Mesajlar
1.638
Makaleler
4
Çözümler
13
Daha fazla  
Cinsiyet
Erkek
Merhaba, geçen gün yapmış olduğumuz bir ödevde kendim "base class" ögemden türetilmiş sınıfımdaki public fonksiyon ve üyelere erişmeyi denediğimde başaramamıştım ve hocama sorduğumda bunun yapılabileceğini söylemişti ve kodu atmamı kendisinin düzelteceğini söylemişti. Kendisinin düzelttiği kodda da ürettiği obje türetilmiş sınıftan olduğundan erişebiliyordu. Objeyi ana sınıftan oluşturursam yine erişim sağlayamıyordum. Sırayla açıklamam gerekirse;

1- Shape adında bir base class var.
2- 3DShape diye türetilmiş sınıfımız var ve bu sınıfın alanı döndüren getAlan adında bir fonksiyonu var.
3- Ödevde Shape küp olarak bir sınıf tanımlamamız isteniyor ve bununla küp.getAlan yaparak alanına erişmemiz isteniyordu.
4- Shape olarak değil de 3DShape olarak objeyi tanımladığımda (3DShape küp) getAlan´a erişebiliyordum.

Sonuç olarak hala kafamda oturtamadım bu durumu. Base class üzerinden türetilmiş sınıfın üyelerine erişebilir miyim?
 
Son düzenleyen: Moderatör:
Çözüm
Java tabanlı birisi olduğum için bana "Base" demek ters geliyor bu yüzden yazının devamında Super görürseniz o base demek.

Uzmanlık alanım Java, C# ve Typescript/Javascript olduğu için örneği C++ yerine Java üzerinden vereceğim.

Sub class üzerinde var olup Super class'da bulunmayan bir methoda Super Class tipinden erişilmez. Ancak. Bahsi geçen getAlan methodu abstract ise Super üzerinden tanımlı olmasa bile kendisi kalıtan Sub class üzerinde tanımlı olacağı için Polymorphism gereği Super Class tipi ile çağrılıp kullanılabilir.

Bkz. basit bir örnek.

Java:
public static void main(String[] args)
{
  Shape3D my3DShape = new Shape3D(10, 20, 30);
  Shape shapeHolder = my3DShape;
  double area = shapeHolder.getArea();
  // Veya
  double area2 = ((Shape) my3DShape).getArea();
  // Veya
  Shape shape = new Shape3D(5, 10, 15);
  double area3 = shape.getArea();
}


public class Shape3D extends Shape
{

  private double width, height, depth;

  public Shape3D(double width, double height, double depth)
  {
    super("3D SHAPE");
    this.width = width;
    this.height = height;
    this.depth = depth;
  }

  public double getWidth()
  {
    return width;
  }

  public double getHeight()
  {
    return height;
  }

  public double getDepth()
  {
    return depth;
  }

  @Override
  public double getArea()
  {
    return this.width * this.height * this.depth;
  }
}

public abstract class Shape
{

  protected String name;

  public Shape(String name)
  {
    this.name = name;
  }

  public String getName()
  {
    return name;
  }

  public abstract double getArea();
}
Çok teşekkür ederim açıklamanız ve vakit ayırdığınız için. Sorduğum şey tam olarak buydu
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…