【问题标题】:C++ Accessing Another Class Member [closed]C ++访问另一个类成员[关闭]
【发布时间】:2014-07-30 12:34:14
【问题描述】:

我有一个关于类和对象的问题。首先这是我的程序。

#include <iostream>
#include <conio.h>
using namespace std;

class Class1{
    private:
        int x;
    public:
        Class1();
        void Display();

};
class Class2{
    private:
        double z;
    public:
        Class2();
        void Display();
        Class2 Add(Class1);
};

Class1::Class1(){   x = 1;  }
Class2::Class2(){   z = 5;  }
void Class1::Display(){ cout<<x<<"\n";  }
void Class2::Display(){ cout<<z<<"\n";  }
Class2 Class2::Add(Class1 t){
    Class2 y;
    y.z = t.x + z;
    return y;
}

int main(){

    Class1 ob1; // ob1 = 1 //
    Class2 ob2,ob_x; // ob2 = 5  | ob_x = 5 //  
    ob_x = ob2.Add(ob1); // Add ob + ob1 and Assigned them to ob_x //
    ob_x.Display();

    cout<<endl;
    getche();
    return 0;
}

我想你知道错误在哪里,我怎样才能访问另一个班级成员? 我的意思是我们没有在大学里学过,我们所知道的就是这么简单。我可以用另一个可以访问这两个类的全局函数来做到这一点吗?如果可以提供一些小技巧,请提供帮助,谢谢

【问题讨论】:

  • 听说过 getter/setter 方法吗?
  • 这是一个入门教程cplusplus.com/doc/tutorial/classes
  • @user3723837 '但这有什么帮助呢?' 提供对底层内部私有数据成员的访问权限?!?你在理解这个原则上有什么特别的问题??
  • @user3723837 也许重用他们的 getter/setter 方法??
  • 大胆的建议我知道,但你有没有考虑向你的大学讲师/导师寻求帮助?大概这就是他们的报酬。 Stackoverflow 并不适合学习一门语言。

标签: c++ class object


【解决方案1】:

只需将getter方法int get_x()添加到Class1

#include <iostream>
#include <conio.h>
using namespace std;

class Class1{
    private:
        int x;
    public:
        Class1();
        void Display();
    int get_x();

};

int Class1::get_x()
{
 return x;
}

class Class2{
    private:
        double z;
    public:
        Class2();
        void Display();
        Class2 Add(Class1);
};

Class1::Class1(){   x = 1;  }
Class2::Class2(){   z = 5;  }
void Class1::Display(){ cout<<x<<"\n";  }
void Class2::Display(){ cout<<z<<"\n";  }
Class2 Class2::Add(Class1 t){
    Class2 y;
    y.z = t.get_x() + z;
    return y;
}

int main(){

    Class1 ob1; // ob1 = 1 //
    Class2 ob2,ob_x; // ob2 = 5  | ob_x = 5 //  
    ob_x = ob2.Add(ob1); // Add ob + ob1 and Assigned them to ob_x //
    ob_x.Display();

    cout<<endl;
    getche();
    return 0;
}

【讨论】:

    【解决方案2】:

    您在课堂上创建了x private,这意味着您无法从其他课堂访问它。这就是您的程序出错的原因。设置为public,然后您的程序将开始运行。

    【讨论】:

    • 这行得通,但如果他不想公开怎么办?
    • 谢谢,但我们在大学了解到,当我们将变量设为 public 时存在风险,我错了还是什么?
    • 风险在于你可以在编译器不抱怨的情况下犯语义错误。等等
    • @user3595398:您的帖子在正常阅读速度下几乎无法理解。
    • 不,你不能在类之外使用私有变量,也不能在继承的变量中使用。也不需要保护。 getter 方法有什么难以理解的地方?
    猜你喜欢
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    相关资源
    最近更新 更多