好吧,只是在课堂上尝试创建一个简单的程序,它有2个类。 A类和B类。我试图在A类的构造函数中初始化我的变量,然后做一些动作并将其传递给B类,我也可以在其中做出一些动作。所以A类是基类。但是,当我编译程序时,我有两个错误 -
错误:'i'未在此范围内声明
对于A类和B类。所以我有两个问题1)为什么构造函数没有声明变量(根据第一个调用的book构造函数)? 2)我可以用什么方法将变量从A类转移到B类中使用?
#include <iostream>
#include <cstdio>
using namespace std;
class A {
public:
A(){
int i =1;
}
~A(){}
int foo () {
int p = i+1;
i++;
return p;
}
};
class B : public A {
public:
int showme() {
return i;
}
};
int main() {
A j;
B k;
cout<< k.showme()<<endl;
cout<< j.foo()<<endl;
return 0;
}
答案 0 :(得分:2)
首先,得到一本好书:
The Definitive C++ Book Guide and List
熟悉基础知识。你的问题表明你现在对C ++的理解已经完全搞乱了。
现在回到实际的问题。
1)C-tor不声明一个类成员变量,它只能声明一个局部变量,因为c-tor也是一个函数。您需要明确地声明成员变量:
class A {
int i;
public:
A(int _i): i(_i) { }
};
2)术语&#34;转移&#34;本身是不正确的。在这种情况下,这两个类位于继承层次结构中,因此变量i
由类B
继承,如果您将其声明为protected
,那么它将是可访问的你来弄吧。函数B::showme()
已正确定义。修复第一部分,示例即可运行。
3)不混淆类和对象。当声明了类A
的对象时,它与类A
或B
的另一个对象无关。 j
和k
分享他们自己的int i
私有实例(前提是你修复了(a)),如果你想拥有k
的{{1}}实例{1}}等于i
,您可以例如实现一个拷贝构造函数或一对getter / setter函数。