AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

BCB: Problem mit abstrakter Klasse

Ein Thema von messie · begonnen am 5. Feb 2006 · letzter Beitrag vom 5. Feb 2006
Antwort Antwort
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#1

BCB: Problem mit abstrakter Klasse

  Alt 5. Feb 2006, 19:04
Hallo,

ich möchte im BCB zur Laufzeit eine TntComboBox erzeugen und mit Items füttern. Deren Typ ist TTntStrings. Ich versuche dazu, lokal TntStrings zu erzeugen und die später dann an die TntCombobox zu übergeben.
Das Problem: mit dem Konstrukt
Code:
TTntStrings *MyItems;
  MyItems = new TTntStrings;
falle ich auf die Nase, weil TTntString eine abstrakte Klasse ist (bitte nicht fragen ob ich deren Sinn verstanden habe).

Muss ich, wenn ich nach diesem Prinzip vorgehen benutzen will immer den Weg über eine abgeleitete Klasse gehen?

Käme mir etwas merkwürdig vor...

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: BCB: Problem mit abstrakter Klasse

  Alt 5. Feb 2006, 19:05
Hi,

ja, ist genauso wie bei TStrings mit Delphi. Verwende TntStringList - falls vorhanden.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#3

Re: BCB: Problem mit abstrakter Klasse

  Alt 5. Feb 2006, 19:16
Zitat von mirage228:
ja, ist genauso wie bei TStrings mit Delphi. Verwende TntStringList - falls vorhanden.
Nur daß Delphi einem vorgaukelt daß es funktioniert - Compiler meldet "Instanz für virtuelle...erzeugt" und einen dann zur Laufzeit in einen abstrakten Fehler laufen läßt...

Grüße, Messie
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: BCB: Problem mit abstrakter Klasse

  Alt 5. Feb 2006, 19:20
Zitat von messie:
Muss ich, wenn ich nach diesem Prinzip vorgehen benutzen will immer den Weg über eine abgeleitete Klasse gehen?

Käme mir etwas merkwürdig vor...
Sorry wenn du jetzt den Eindruck vom Oberlehrer hast oder so, aber abstrakte Klassen werden dir sicherlich häufiger begegnen und sind gar nicht so unwichtig. Deshalb kurz die Erklärung, warum du die nicht direkt instanziieren kannst.

Eine abstrakte Klasse kann Methoden besitzen, die sind abstrakt. Das heißt du hast erstmal eine ganz normale Klasse und für die gilt auch einfach alles, was für eine normale Klasse gilt. Dann kommt aber noch ein wenig dazu, nämlich die abstrakten Methoden. Für diese sagst du nur, wie sie heißen und was für Parameter sie bekommen. Wie sie implementiert werden, dass steht dann noch gar nicht fest, gibt einfach nur die Signatur.
Würdest du jetzt eine Instanz von dieser Klasse erzeugen, würden diese nicht implementierten Methoden natürlich nicht funktionieren. Also geht das erst gar nicht.

Wo ist der Sinn? Abstraktion. Jeder nicht abstrakte Nachfahre hat auf jeden Fall die Methoden mit diesen Signaturen, aber wie genau die implementiert werden, kann dir egal sein. Wenn du zum Beispiel Daten speichern willst, könntest du einen Container schaffen, der alles mögliche aufnimmt, einfach mit einem Add(Element : TElement) oder etwas C-Like add(TElement element).
Ist dies eine abstrakte Methode der Klasse TContainer, könntest du jetzt eine THashList, TLinkedList und ein TArray ableiten, die zwar alle diese Methode implentieren, aber völlig anders jeweils.
Die THashlist, könnte wirklich mit Hashcodes arbeiten, die TLinkedList eine verkettete Liste sein und nun ja, TArray ist auch klar.
In deinem Programm benutzt du einfach nur ein TContainer und egal was du für einen Nachfahren bekommst, es würde funktionieren. Und dich interessiert in der Regel einfach nicht, wie gespeichert wird, hauptsache schnell und es funktioniert.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz