64,648
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
class a
{
public:
void pintf(void)
{
cout<<"A:pintf"<<endl;
}
};
class b:public a
{
public:
void pintf(void)
{
cout<<"B:pintf"<<endl;
}
};
class c:public a
{
public:
void pintf(void)
{
cout<<"C:pintf"<<endl;
}
};
int main(int argc,char *argv[])
{
a * pa = new a;
b * pb = (b*)pa;
pb->pintf();//B::printf pb指向的实际模型对象为基类(a类), 怎么能访问到派生类(b类)对象的成员呢
}
class a
{
public:
int aa;
public:
a(){aa=2;}
void pintf(void)
{
cout <<"A:pintf"<<endl; //这里没有使用aa,printf函数在定义了类a后,建立类a对象前就存在于内存代码段了
}
};
int main(int argc ,char *argv[])
{
b * pb = NULL;
pb->pintf()//正常输出,
}
class a
{
public:
int aa;
public:
a(){aa=2;}
void pintf(void)
{
cout <<"A:pintf"<<aa<<endl; //这里使用aa,而变量aa在定义了a类对象前并没有在内存中开辟空间。
}
};
int main(int argc ,char *argv[])
{
b * pb = NULL ;
pb->pintf()// 运行出错,将b *pb;改为b*pb =new b;就好。
}
a * pa = new a;
b * pb = (b*)pa;//pb实际指向a对象,但其类型为b类类型
pb->pintf()//prinf作为b类的成员函数,为类中所有对象所有,在b类对象建立之前存在于内存代码段中,故可以成功调用。但printf中要正确调用了b类中的数据成员,则应定义b类对象
class b
{
public:
int aa;
public:
b():aa(2){ }
void pintf(void)
{
cout <<"B:pintf" <<aa<<endl;
}
int main(int argc,char *argv[])
{
b * pb =NULL ;
pb->pintf();//运行出错
};
#include <iostream>
using namespace std;
class a
{
public:
void pintf(void)
{
cout<<"A:pintf"<<endl;
}
void printA(void)
{
cout<<"A"<<endl;
}
};
class b:public a
{
public:
void pintf(void)
{
cout<<"B:pintf"<<endl;
}
void printB(void)
{
cout<<"B:"<<endl;
}
};
class c:public a
{
public:
void pintf(void)
{
cout<<"C:pintf"<<endl;
}
};
int main(int argc,char *argv[])
{
a * pa = new a;
b * pb = (b*)pa;
pb->pintf();//B::printf pb指向的实际模型对象为基类(a类), 怎么能访问到派生类(b类)对象的成员呢
pb->printA();
pb->printB();
}