怎样在类中定义另一个类的对象

时间:2022-09-29 19:51:08
假如我声明了

class A 
{
static int i;
static void Load();
}

并实现了class A;

想在再声明一个类B,在类B的实现中产生类5个A的对象

16 个解决方案

#1


#include a.h
class B
{
 public:
A a1,A2,A3,A4,A5;

}

#2


class B 
{
 A a1;
 A a2;
 A a3;
 A a4;
 A a5;
}

就这么简单,楼主注意class B申明的时候要前面有class A哦,不然编译器不知道A是什么东西
然后注意构造函数和析构函数就可以了

#3


如果类A在单独的文件
就要把A的头文件加进来
如1楼
#include a.h
class B
{
 public:
A a1,A2,A3,A4,A5;

}

如果A的定义和B在同一文件,  
只要在B的前前面有A的声明就行。
class A;

#4


就像定义int型变量一样简单

class A  
{
   static int i;
   static void Load();
   B b[5];
};

#5


类其实就是自定义类型,怎么用标准类型就怎么用类

#6


楼上正解

#7


引用 2 楼  的回复:
class B 
{
 A a1;
 A a2;
 A a3;
 A a4;
 A a5;
}

就这么简单,楼主注意class B申明的时候要前面有class A哦,不然编译器不知道A是什么东西
然后注意构造函数和析构函数就可以了

构造函数和析构函数需要什么注意?

#8


其实我也像大家说的那样,我在A的头文件声明了类A, 然后也声明了类B(在B中用A声明了一个变量),在A的cpp文件定义类A,接着定义类B,然后在另一文件主函数实现了类B,这些操作编译通过,可以执行,但效果不是我想象那样,但我一旦把B中的A声明注释掉或不实现类B就没事。

#9


类其实就是自定义类型,怎么用标准类型就怎么用类www.913wz.com

#10


楼上说的很明白。

#11


楼上说的很明白。

#12



//////////////////////////////////////////////////////////////////////////
//TurnAround.h
//////////////////////////////////////////////////////////////////////////

#include "stdafx.h"

//////////////////////////////////////////////////////////////////////////
//宏定义
#define FISH_NUM 50

//////////////////////////////////////////////////////////////////////////
//类CMyPoint
class CMyPoint 
{
public:
CMyPoint();
CMyPoint(float x, float y);

float x;
float y;
};

//////////////////////////////////////////////////////////////////////////
//类Fish_part1
class Fish_part1
{
public:
Fish_part1();

static HTEXTURE hTex[5];
hgeSprite *hSpr ;
hgeSprite *hSpr1, *hSpr2; //备用精灵
hgeAnimation *hAnimation; //动画


float time0 ; //间隔
float time1 ; //间隔
float time_disppear;

static int pic_num ; //所有图片数目
bool alive ; //显示标志
int moveType;
int power ;

float rot ; //方向
float rotBegin;
float speed ;
float x_pos, y_pos;

CMyPoint point[10];
CMyPoint begin_point[5];
int point_b;
int point_i;
CMyPoint point_target;

static int n_Count ; //对象统计


void Init(HGE *pHge); //初始化
void Init1(HGE *pHge, int num);
void Move(HGE *pHge);
void disappear(HGE *pHge);
void GetDistanceAndAngle(CMyPoint pt, float *distance, float *angle);

static void LoadTex(HGE *pHge, char *path); //加载
void Render(); //显示压分
static void CleanUp(HGE *pHge);

protected:
private:
};

//////////////////////////////////////////////////////////////////////////
//类CFishGroup
class CFishGroup
{
public:
CFishGroup();

Fish_part1 fish;

float time;
int nFishs;

void InitFishGroup(HGE *pHge, int nfish);
void Render();
protected:
private:
};

#13



//////////////////////////////////////////////////////////////////////////
//TurnAround.h
//////////////////////////////////////////////////////////////////////////

#include "stdafx.h"

//////////////////////////////////////////////////////////////////////////
//宏定义
#define FISH_NUM 50

//////////////////////////////////////////////////////////////////////////
//类CMyPoint
class CMyPoint 
{
public:
CMyPoint();
CMyPoint(float x, float y);

float x;
float y;
};

//////////////////////////////////////////////////////////////////////////
//类Fish_part1
class Fish_part1
{
public:
Fish_part1();

static HTEXTURE hTex[5];
hgeSprite *hSpr ;
hgeSprite *hSpr1, *hSpr2; //备用精灵
hgeAnimation *hAnimation; //动画


float time0 ; //间隔
float time1 ; //间隔
float time_disppear;

static int pic_num ; //所有图片数目
bool alive ; //显示标志
int moveType;
int power ;

float rot ; //方向
float rotBegin;
float speed ;
float x_pos, y_pos;

CMyPoint point[10];
CMyPoint begin_point[5];
int point_b;
int point_i;
CMyPoint point_target;

static int n_Count ; //对象统计


void Init(HGE *pHge); //初始化
void Init1(HGE *pHge, int num);
void Move(HGE *pHge);
void disappear(HGE *pHge);
void GetDistanceAndAngle(CMyPoint pt, float *distance, float *angle);

static void LoadTex(HGE *pHge, char *path); //加载
void Render(); //显示压分
static void CleanUp(HGE *pHge);

protected:
private:
};

//////////////////////////////////////////////////////////////////////////
//类CFishGroup
class CFishGroup
{
public:
CFishGroup();

Fish_part1 fish;

float         time;
int nFishs;

void InitFishGroup(HGE *pHge, int nfish);
void Render();
protected:
private:
};

#14


class B 
{
  A a1;
  A a2;
  A a3;
  A a4;
  A a5;
};
注意要声明一下哦

#15


结论都还是比较不错

#16


如果对象B有参数该怎么办,比如class B(int,int),如何初始化?

#1


#include a.h
class B
{
 public:
A a1,A2,A3,A4,A5;

}

#2


class B 
{
 A a1;
 A a2;
 A a3;
 A a4;
 A a5;
}

就这么简单,楼主注意class B申明的时候要前面有class A哦,不然编译器不知道A是什么东西
然后注意构造函数和析构函数就可以了

#3


如果类A在单独的文件
就要把A的头文件加进来
如1楼
#include a.h
class B
{
 public:
A a1,A2,A3,A4,A5;

}

如果A的定义和B在同一文件,  
只要在B的前前面有A的声明就行。
class A;

#4


就像定义int型变量一样简单

class A  
{
   static int i;
   static void Load();
   B b[5];
};

#5


类其实就是自定义类型,怎么用标准类型就怎么用类

#6


楼上正解

#7


引用 2 楼  的回复:
class B 
{
 A a1;
 A a2;
 A a3;
 A a4;
 A a5;
}

就这么简单,楼主注意class B申明的时候要前面有class A哦,不然编译器不知道A是什么东西
然后注意构造函数和析构函数就可以了

构造函数和析构函数需要什么注意?

#8


其实我也像大家说的那样,我在A的头文件声明了类A, 然后也声明了类B(在B中用A声明了一个变量),在A的cpp文件定义类A,接着定义类B,然后在另一文件主函数实现了类B,这些操作编译通过,可以执行,但效果不是我想象那样,但我一旦把B中的A声明注释掉或不实现类B就没事。

#9


类其实就是自定义类型,怎么用标准类型就怎么用类www.913wz.com

#10


楼上说的很明白。

#11


楼上说的很明白。

#12



//////////////////////////////////////////////////////////////////////////
//TurnAround.h
//////////////////////////////////////////////////////////////////////////

#include "stdafx.h"

//////////////////////////////////////////////////////////////////////////
//宏定义
#define FISH_NUM 50

//////////////////////////////////////////////////////////////////////////
//类CMyPoint
class CMyPoint 
{
public:
CMyPoint();
CMyPoint(float x, float y);

float x;
float y;
};

//////////////////////////////////////////////////////////////////////////
//类Fish_part1
class Fish_part1
{
public:
Fish_part1();

static HTEXTURE hTex[5];
hgeSprite *hSpr ;
hgeSprite *hSpr1, *hSpr2; //备用精灵
hgeAnimation *hAnimation; //动画


float time0 ; //间隔
float time1 ; //间隔
float time_disppear;

static int pic_num ; //所有图片数目
bool alive ; //显示标志
int moveType;
int power ;

float rot ; //方向
float rotBegin;
float speed ;
float x_pos, y_pos;

CMyPoint point[10];
CMyPoint begin_point[5];
int point_b;
int point_i;
CMyPoint point_target;

static int n_Count ; //对象统计


void Init(HGE *pHge); //初始化
void Init1(HGE *pHge, int num);
void Move(HGE *pHge);
void disappear(HGE *pHge);
void GetDistanceAndAngle(CMyPoint pt, float *distance, float *angle);

static void LoadTex(HGE *pHge, char *path); //加载
void Render(); //显示压分
static void CleanUp(HGE *pHge);

protected:
private:
};

//////////////////////////////////////////////////////////////////////////
//类CFishGroup
class CFishGroup
{
public:
CFishGroup();

Fish_part1 fish;

float time;
int nFishs;

void InitFishGroup(HGE *pHge, int nfish);
void Render();
protected:
private:
};

#13



//////////////////////////////////////////////////////////////////////////
//TurnAround.h
//////////////////////////////////////////////////////////////////////////

#include "stdafx.h"

//////////////////////////////////////////////////////////////////////////
//宏定义
#define FISH_NUM 50

//////////////////////////////////////////////////////////////////////////
//类CMyPoint
class CMyPoint 
{
public:
CMyPoint();
CMyPoint(float x, float y);

float x;
float y;
};

//////////////////////////////////////////////////////////////////////////
//类Fish_part1
class Fish_part1
{
public:
Fish_part1();

static HTEXTURE hTex[5];
hgeSprite *hSpr ;
hgeSprite *hSpr1, *hSpr2; //备用精灵
hgeAnimation *hAnimation; //动画


float time0 ; //间隔
float time1 ; //间隔
float time_disppear;

static int pic_num ; //所有图片数目
bool alive ; //显示标志
int moveType;
int power ;

float rot ; //方向
float rotBegin;
float speed ;
float x_pos, y_pos;

CMyPoint point[10];
CMyPoint begin_point[5];
int point_b;
int point_i;
CMyPoint point_target;

static int n_Count ; //对象统计


void Init(HGE *pHge); //初始化
void Init1(HGE *pHge, int num);
void Move(HGE *pHge);
void disappear(HGE *pHge);
void GetDistanceAndAngle(CMyPoint pt, float *distance, float *angle);

static void LoadTex(HGE *pHge, char *path); //加载
void Render(); //显示压分
static void CleanUp(HGE *pHge);

protected:
private:
};

//////////////////////////////////////////////////////////////////////////
//类CFishGroup
class CFishGroup
{
public:
CFishGroup();

Fish_part1 fish;

float         time;
int nFishs;

void InitFishGroup(HGE *pHge, int nfish);
void Render();
protected:
private:
};

#14


class B 
{
  A a1;
  A a2;
  A a3;
  A a4;
  A a5;
};
注意要声明一下哦

#15


结论都还是比较不错

#16


如果对象B有参数该怎么办,比如class B(int,int),如何初始化?