Hvordan laver man en klasse som Collection.Base i C# til C++?
Så hvis jeg har en anden klasse (Klasse1) som nedarver fra Base (Klasse1 : Base) Så man kan gøre Klasse1 til en Array der indeholder en liste af andre objecter, som ikke har en fast længde men længden men ændre sig eterhånden som man indsætter flere objecter til listen.
unmanaged C++ : brug en af de STL typer Bertel foreslår (fordi de er templated har du ikke brug for at lave din egen typesafe klasse udfra Collection.Base
Jeg har bare ikke fattet menningen med Iterators i STL.. F.eks med Insert i Vector.. Istedet for at lave en Iterator og finde placeringen.. Ville det så ikke være nemmere at bare lave en insert function der så sådan her ud: Insert(int Placering, const TYPE &val)
Man kan godt lave: std::vector<int> Vec(124); Vec[0] = 12; Vec[123] = 34; printf("%d %d\n", Vec[0], Vec[123]); Man siger at en vector (til forskel fra f.ex. en list) tillader random access.
STL har tre komponenter: -containers, f.ex. vector, list, map -algoritmer, f.ex. sort, find, -iterator som kan ses som et interface mellem containers og algoritmer, der gør at en algoritme kan bruges med alle typer
Hvis man arbejder med en vector kan man bruge:
for(int i = 0; i < Vec.size(); i++) DoSomeThingWithAnInt(Vec[i]);
Men det kan man ikke med f.ex. en list, der kan man kun lave sekventiel acces med f.ex en iterator:
public class MyData { private string s; public MyData() { s = ""; } public MyData(string s) { this.s = s; } public string S { get { return s; } set { s = value; } } }
public class MyCollection : CollectionBase { public MyData this[int index] { get { return (MyData)List[index]; } } public int Add(MyData value) { return List.Add(value); } }
class MainClass { public static void Main(string[] args) { MyCollection mycol = new MyCollection(); mycol.Add(new MyData("A")); mycol.Add(new MyData("BB")); mycol.Add(new MyData("CCC")); for(int i = 0; i < mycol.Count; i++) { Console.WriteLine(mycol[i].S); } } }
Hvorfor gør du i "vector<MyData*> myvec" MyData til en Pointer? Jeg har aldrig rigtig forstået Pointers.. Hvorfor skal man pege på en hukommelse adresse?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.