C++ PRIMER 上这句话什么意思
#include <iostream>
using namespace std;
class Base
{
public:
Base()
{
x = 10;
y = 20;
}
virtual void print()
{
cout<<" x = "<<x<<" y = "<<y<<endl;
}
public:
int x;
int y;
};
class Inh : public Base
{
public:
Inh(int xx, int yy, int zz):x(xx), y(yy),z(zz) //错误在这
{
}
void print()
{
Base::print();
cout<<"z = "<<z<<endl;
}
private:
int z;
};
int main()
{
Inh tst(1,2,3);
Base& vs =tst;
vs.print();
return 0;
}
问题1:初始化列表为什么不能初始化从基类继承而来的成员变量?
问题2:C++ PRIMER上在谈到引用时说“非CONST引用只能引用同类型的对象” 那么我们最常用的多态不也是用指针和引用来实现的吗!并没有加const ,如:Base& vs =tst; 这也不是同类型啊。
C++
[解决办法]
基类的成员要用基类的构造函数初始化。。
[解决办法]
问题1:初始化列表为什么不能初始化从基类继承而来的成员变量?
你的派生类里面在参数初始化列表里调用的是A类的带参构造函数,但是A中没有这种函数啊,派生类能调用的也都是基类里面有的才行。
问题2:C++ PRIMER上在谈到引用时说“非CONST引用只能引用同类型的对象” 那么我们最常用的多态不也是用指针和引用来实现的吗!并没有加const ,如:Base& vs =tst; 这也不是同类型啊。
//测试“非CONST引用只能引用同类型的对象”
void Testconstref()
{
int i = 1;
//float &f = i; //编译错误,不能把int类型转换为float&类型
const float &f2 = i; //但是这个可以了,因为是const 引用了
//以上真机上测试的
}