关于经过引用来调用虚函数
关于通过引用来调用虚函数
#include < iostream >
using namespace std;
class Box
{
public:
Box(int, int, int);
virtual void show();
protected:
int length;
int breadth;
int longth;
};
class Carton : public Box
{
public:
Carton(int, int, int, int);
protected:
virtual void show();
int weight;
};
class Package : public Carton
{
public:
Package(int, int, int, int, char vname[30]);
virtual void show();
private:
char name[30];
};
void ashow( Box& rBox)
{
rBox.show();
}[color=#000000]
[/color]
int main(void)
{
int alength;
int abreadth;
int alongth;
int aweight;
char aname[30];
cin >> alength >> abreadth >> alongth >> aweight >> aname;
Box mybox(alength, abreadth, alongth);
Carton mycarton(alength, abreadth, alongth, aweight);
Package package(alength, abreadth, alongth, aweight, aname);
mybox.show();
// mycarton.show();
package.show();
Box* pbox = &mycarton;
pbox->show();
Carton* acarton = &package;
// acarton->show();
ashow(package);
return 0;
}
Box::Box(int vlength, int vbreadth, int vlongth) : length(vlength), breadth(vbreadth), longth(vlongth)
{}
void Box::show()
{
cout << length << " "
<< breadth << " "
<< longth << endl;
}
Carton::Carton(int vlength, int vbreadth, int vlongth, int vweight) : Box(vlength, vbreadth, vlongth), weight(vweight)
{}
void Carton::show()
{
cout << length << " "
<< breadth << " "
<< longth << " "
<< weight << endl;
}
Package::Package(int vlength, int vbreadth, int vlongth, int vweight, char vname[30]) : Carton(vlength, vbreadth, vlongth, vweight)
{
strcpy_s(name,20,vname);
}
void Package::show()
{
cout << length << " "
<< breadth << " "
<< longth << " "
<< weight << " "
<< name << endl;
}
为什么
void ashow( Box& rBox)
{
rBox.show();
}
中void ashow(Box& rBox)不能写为void ashow(const Box& rBox)
在形参前加const就报错
错误 1 error C2662: “Box::show”: 不能将“this”指针从“const Box”转换为“Box &”
错误 2 IntelliSense: 对象包含与成员函数不兼容的类型限定符
------解决方案--------------------
#include < iostream >
using namespace std;
class Box
{
public:
Box(int, int, int);
virtual void show();
protected:
int length;
int breadth;
int longth;
};
class Carton : public Box
{
public:
Carton(int, int, int, int);
protected:
virtual void show();
int weight;
};
class Package : public Carton
{
public:
Package(int, int, int, int, char vname[30]);
virtual void show();
private:
char name[30];
};
void ashow( Box& rBox)
{
rBox.show();
}[color=#000000]
[/color]
int main(void)
{
int alength;
int abreadth;
int alongth;
int aweight;
char aname[30];
cin >> alength >> abreadth >> alongth >> aweight >> aname;
Box mybox(alength, abreadth, alongth);
Carton mycarton(alength, abreadth, alongth, aweight);
Package package(alength, abreadth, alongth, aweight, aname);
mybox.show();
// mycarton.show();
package.show();
Box* pbox = &mycarton;
pbox->show();
Carton* acarton = &package;
// acarton->show();
ashow(package);
return 0;
}
Box::Box(int vlength, int vbreadth, int vlongth) : length(vlength), breadth(vbreadth), longth(vlongth)
{}
void Box::show()
{
cout << length << " "
<< breadth << " "
<< longth << endl;
}
Carton::Carton(int vlength, int vbreadth, int vlongth, int vweight) : Box(vlength, vbreadth, vlongth), weight(vweight)
{}
void Carton::show()
{
cout << length << " "
<< breadth << " "
<< longth << " "
<< weight << endl;
}
Package::Package(int vlength, int vbreadth, int vlongth, int vweight, char vname[30]) : Carton(vlength, vbreadth, vlongth, vweight)
{
strcpy_s(name,20,vname);
}
void Package::show()
{
cout << length << " "
<< breadth << " "
<< longth << " "
<< weight << " "
<< name << endl;
}
为什么
void ashow( Box& rBox)
{
rBox.show();
}
中void ashow(Box& rBox)不能写为void ashow(const Box& rBox)
在形参前加const就报错
错误 1 error C2662: “Box::show”: 不能将“this”指针从“const Box”转换为“Box &”
错误 2 IntelliSense: 对象包含与成员函数不兼容的类型限定符
------解决方案--------------------