C++关于类的继承的问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 18:20:08
#include <iostream>
using namespace std;
class che
{
public:
virtual void SetAttack(int aa)=0;
};

class car:public che
{
friend class jj;
public:
void SetAttack(int aa){carAttack=aa;}
int getcAttack();
private:

int carAttack;
};

int car::getcAttack()
{return carAttack;}

class jj:public car
{

public:
car cc;
void kk(){cout<<cc.carAttack<<endl;};
};

int main()
{

jj zz;
car cc;
che *kche[1]={&cc};
int aa;
cout<<"请输入CAR的攻击力:";
cin>>aa;
zz.SetAttack(aa);
cout<<zz.getcAttack()<<endl;
zz.kk();
}

为什么void kk(){cout<<cc.carAttack<<endl;};
cc.carAttack 不能正确取到carAttack的值?

friend class jj;
友元函数 不是可以取到car类的所有成员吗?
#define private public ?

用p

-----------给你作了分析了-------------------
class jj:public car
{

public:
car cc;//////关键的问题在这里。这里只是声明一个car 类对象cc.这个cc与你改写的那个对象有什么关系呢?????答案是:没有关系。
既然是没有关系,那它返回的当然不可能是你修改的那个了。
void kk(){cout<<cc.carAttack<<endl;};
};

class jj:public car
{

public:
jj(car& cc);//要把你的cc对象传进来。
void kk(){cout<<m_cc.carAttack<<endl;};//这里是体现出了可访问private成员的本领。

private:
car m_cc;
};
jj::jj(car& cc)
{
m_cc=cc;//这才与car建立了联系。
}

这样就可以了,在文件开始处增加如下行:
#define private public

关键是你的zz对象,在建立的时候,并没有初始化数据成员,而你的
void kk(){cout<<cc.carAttack<<endl;}; 这个函数是返回cc的,数据成员,你没有初始化,返回的值,是一个未知的值···
你自己 好好想想吧 ···
你可以在car类 加入 构造函数 car():carAttack(0) {}
试一下