}
public void Push(Shape ss) // fonction pour enregistrer dans le tableau _pList les Shapes créer précedement.
{
if
(ss.IsSeg())
{
_pList[_current + 1] = new Seg(ss); // Ici bug
_current = _current + 1;
}
if (ss.IsArc())
{
_pList[_current + 1] = new Arc(ss);
_current = _current + 1;
}
}
public Figure Clone()
{
return new Figure(this);
}
publicvoid
PrintConsole()
{
foreach (
Shape
ss
in
_pList)
{
ss.PrintConsole();
}
}
}
classTestClass
{
static
void
Main()
{
Figure forme1 =
new
Figure
(5);
.
Seg ss =
new
.
Seg
(1, 1, 2, 2);
forme1.Push(ss);
Arc aa =
new
Arc
(1, 2, 1, 0, 3.1415);
forme1.Push(ss);
.
Seg ss1 =
new
Seg
(2, 2, 3, 2);
forme1.Push(ss);
forme1.PrintConsole();
}
}
Mon problème c'est que ça ne marche pas, le compilateur me dit :L'exception System.NullReferenceException n'a pas été gérée
Message="La référence d'objet n'est pas définie à une instance d'un objet.". au moment ou le Seg (ou Arc) est enregistré dans le tableau _pList.
Je ne comprend pas pourquoi et surtout comment faire pour que ça marche.
cs_zbar
Messages postés5Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention17 décembre 2008 16 déc. 2008 à 17:38
Non j'ai le même problème avec _current++.
Je ne voulais pas passer par une List<Shape> parce je ne peux pas faire de copie de la List et je n'arrive pas à l'utiliser ailleurs que dans le main.
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 16 déc. 2008 à 18:17
Bonsoir,
Serait bien de donner du code qui compile. Copie-coller dans VS et avoir des 10aines d'erreurs, ça donne pas envie d'aider...
On sait même pas ce que tu veux faire exactement !
Mon conseil avant tout: reposter du code qui fonctionne, expliquer ce que tu veux exactement et regarder dans la documentation ce que veux dire le mot clef abstact, override, base, virtual et aussi le ~, car visiblement les concepts de base n'ont pas été bien compris...
cs_zbar
Messages postés5Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention17 décembre 2008 17 déc. 2008 à 14:05
Ok dans le recopiage du code en essayant de le simplifié ça a un peu tout modifier.
Voici donc le code pour qu'il compile et bug à l'endroit dit.
using
System;
public
class
BPoint{
private
double _x;
public
double x{
get {
return _x; }
set { _x =
value; }}
private
double _y;
public
double y{
get {
return _y; }
set { _y =
value; }}
//constructeurs
public BPoint(){
this._x = 0;
this._y = 0;}
public BPoint(
double xx,
double yy){
this._x = (xx);
this._y = (yy);}
public BPoint(
BPoint p){
this._x = (p._x);
this._y = (p.y);}
~BPoint() { }
}
public
abstract
class
Shape
// la class mŠre virtuel {
public Shape (){}~Shape() {}
public
abstract
void PrintConsole();
public
abstract
bool IsSeg();
public
abstract
bool IsArc();
public
abstract
Shape Clone();}
public
class
Seg :
Shape
// la class fille n{
private
BPoint _pa;
private
BPoint _pb;
// BPoint est d‚fini comme ayant une valeur x et y
public Seg(
BPoint pa,
BPoint pb) {_pa =
new
BPoint (pa.x,pa.y); _pb =
new
BPoint(pb.x, pb.y);}
// constructeur
public Seg(
double x1,
double y1,
double x2,
double y2) { _pa=
new
BPoint(x1, y1);_pb=
new
BPoint(x2,y2);}
public Seg(
Seg s) {_pa=
new
BPoint(s._pa);_pb=
new
BPoint (s._pb);}
public Seg(
Shape s) {s.Clone();}
public
override
Shape Clone() {
Shape ss =
new
Seg(
this._pa,
this._pb);
return ss; }
public Arc(
Arc A){_Centre =
new
BPoint(A._Centre);_Ray = A._Ray;}
public Arc(
Shape s) {s.Clone();}
public
override
bool IsSeg() {
return
false; }
public
override
bool IsArc() {
return
true; }
public
override
Shape Clone() {
Shape aa =
new
Arc(
this._Centre,
this._Ray);
return aa; }
public
override
void PrintConsole(){
System.
Console.WriteLine(
" Centre : " + _Centre.x +
" " + _Centre.y +
" Rayon " + _Ray);}
}
public
class
Figure
// Ma class tableau qui me pose des problŠmes{
public
Shape[] _pList;
public
int _nbshapes;
public
int _current;
public
int _nbmax;
public
Figure(
int nb)
// mon constructeur{
_nbshapes = nb;
_current = 0;
Shape[] _pList =
new
Shape[nb];}
public
void Push(
Shape ss)
// fonction pour enregistrer dans le tableau _pList les Shapes cr‚er pr‚cedement. {
if (ss.IsSeg()){
_pList[_current + 1] =
new
Seg(ss);
// Ici bug_current = _current + 1;
}
if (ss.IsArc()){
_pList[_current + 1] =
new
Arc(ss);_current = _current + 1;
}
}
public
Figure Clone(){
return (
Figure)
this.MemberwiseClone(); }
public
void PrintConsole(){
foreach (
Shape ss
in _pList){
ss.PrintConsole();
}
}
}
class
TestClass{
static
void Main(){
Figure
forme1 =
new
Figure(5);
Seg
ss =
new
Seg(1, 1, 2, 2);forme1.Push(ss);
Arc
aa =
new
Arc(1, 2, 1);forme1.Push(ss);
Seg
ss1 =
new
Seg(2, 2, 3, 2);forme1.Push(ss);
forme1.PrintConsole();
}
}
Mon objectif pour le résumer, c'est de faire un objet figure qui regroupe mes segments et arcs (classes filles d'une classe shape) de manière à ce que je puisse manipuler une figure d'un seul coup : la translater, l'afficher (ma fonction PrintToConsole actuelle), la copier...
Mon problème réside je pense dans le fait de faire une class ayant un tableau qui regoupe mes éléments shapes.
Merci de votre aide
Antoine
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_zbar
Messages postés5Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention17 décembre 2008 17 déc. 2008 à 15:38
Je ne comprend pas la réponse, oui _pList est une variable local, et je ne travail dessus qu'en local?
Pour _Centre ok je remplace par _Centre =
new
BPoint(x1, y1) dans le constructeur. Quand je met ma class Figure en commentaire ça marche, mais c'est bien pour la class Figure que j'ai des problèmes. Comment attribué à Figure les éléments de Shape? Je tourne autour depuis 3jours je ne trouve pas.
cs_zbar
Messages postés5Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention17 décembre 2008 17 déc. 2008 à 18:18
OK, j'ai supprimer le Shape[] seulement dans le tableau pList seule de type (nom de la classe fille) est copié et pas les élements à savoir _pa et _pb qui restent null ce qui me pose le problème d'affichage. C'est donc un clone superficielle et pas complete qui est faite. Comment faire pour que la copie soit complete?