C ++构造函数并将变量传递给另一个类

时间:2016-09-23 03:08:22

标签: c++ class

好吧,只是在课堂上尝试创建一个简单的程序,它有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;
}

1 个答案:

答案 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的对象时,它与类AB的另一个对象无关。 jk分享他们自己的int i私有实例(前提是你修复了(a)),如果你想拥有k的{​​{1}}实例{1}}等于i,您可以例如实现一个拷贝构造函数或一对getter / setter函数。