64,652
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
using namespace std;
struct Base{
virtual void fun() {cout<<"Base::fun()"<<endl;}
};
struct Derived: Base{
void fun() {cout<<"Derived::fun()"<<endl;}
//private:
// int x;
};
void f(Base* pb,int sz)
{
for(int i=0;i<sz;++i)
pb[sz].fun();
}
int main()
{
if(sizeof(Base) == sizeof(Derived))
{
cout<<"equal\n";
}
Base b[3];
//b[1].fun();
Derived d[3];
Derived dd[5];
f(b,3);
f(d,3); //因为数组名被转化成指针,所以调用f()时,把Derived*--> Base*
cout<<"f(dd,5)\n";
f(dd,5);
return 0;
}
void f(Base* pb,int sz)
{
for(int i=0;i<sz;++i)
pb[i].fun();//here
}
#include<iostream>
using namespace std;
struct Base{
virtual void fun() {cout<<"Base::fun()"<<endl;}
};
struct Derived: Base{
void fun() {cout<<"Derived::fun()"<<endl;}
private:
int x;
};
void f(Base* pb,int sz)
{
for(int i=0;i<sz;++i)
pb[i].fun();
}
int main()
{
if(sizeof(Base) == sizeof(Derived))
{
cout<<"equal\n";
}
Base b[3];
//b[1].fun();
Derived d[3];
Derived dd[5];
f(b,3);
f(d,3); //因为数组名被转化成指针,所以调用f()时,把Derived*--> Base*
cout<<"f(dd,5)\n";
f(dd,5);
return 0;
}
void f(Base* pb,int sz)
{
for(int i=0;i<sz;++i)
pb[i].fun();
}
#include<iostream>
using namespace std;
struct Base{
virtual void fun() {cout<<"Base::fun()"<<endl;}
};
struct Derived: Base{
void fun() {cout<<"Derived::fun()"<<endl;}
//private:
// int x;
};
void f(Base* pb,int sz)
{
for(int i=0;i<sz;++i)
pb[i].fun(); //注意越界
}
int main()
{
if(sizeof(Base) == sizeof(Derived))
{
cout<<"equal\n";
}
Base b[3];
//b[1].fun();
Derived d[3];
Derived dd[5];
f(b,3);
f(d,3); //因为数组名被转化成指针,所以调用f()时,把Derived*--> Base*
cout<<"f(dd,5)\n";
f(dd,5);
return 0;
}
struct Base{
Base():i(1){}
int i;
};
struct Derived: Base{
Derived():i(2){}
int i;
};
int main()
{
Base b[5];
Derived d[5];
for(int i=0;i<5;++i)
{
b[i]=d[i];//虽然也不怎么样~~但是好歹在值上截断了
}
for(int i=0;i<5;++i)
cout<<b[i].i<<endl;//输出的都是基类的i值1
cout<<"------------------"<<endl;
Base*p=d;//你的例子相当于这样
for(int i=0;i<5;++i)
cout<<p[i].i<<endl;//输出1和2相间的数字,为什么?注意此时sizeof(Base)=4;而sizeof(Derived)=8
return 0;
}