C++问题dkfjkjf

来源:百度知道 编辑:UC知道 时间:2024/05/15 09:27:13
#include <iostream>
using namespace std;
class B
{
int i,j;
public:
void set(int a,int b) { i=a;j=b;}
void show() {cout<<i<< ""<<j<<"\n";}
};
class D:private B
{
int k;
public :
D(int x)
{k=x;}
void showk(){ cout<<k<<"\n";}
};
int main()
{
D ob(3);
B *p;//为什么不对?&& 基类指针不是可以指向派生类吗?????有矛盾 && ref P341

p=&ob;
return 0;
}

你先看看我的 对比一下
#include <iostream>
using namespace std;
class B
{
protected:
int i,j;
public:
B(int a,int b) { i=a;j=b;}
virtual void show() {cout<<i<< ","<<j<<"\n";}
};

class D:public B
{
int k;
public :
D(int a,int b,int x):B(a,b)
{k=x;}
void show(){B::show(); cout<<k<<"\n";}
};
int main()
{
D ob(1,2,3);
B *p;
p=&ob;
p->show();
return 0;
}
我改的好多 其实你要是为了不出错 你只要改class D:public B ;就不会报错了 ,可结果我想并不是你想要的

public继承才是is-a关系,私有继承是has-a关系,只能在派生类内部进行类型转化,在外面是无法进行的!!
private继承,protected继承都不能在外部把派生类指针转换成基类指针
private继承只能在派生类内部把派生类对象地址赋给基类指针。
protected继承在派生类内部以及派生类的子类内部把派生类对象地址赋给基类指针。