【问题标题】:c++ access stuff out side the class [closed]c ++访问类之外的东西[关闭]
【发布时间】:2010-11-10 21:06:32
【问题描述】:

好的,假设我有这个:

class A:
{
Public:
    int dd;
}

好的,那我有这个课了:

class B:
{
Public:
    void sss(){ ff=dd; }
    int ff;
}

好的,问题是 B 类不知道 dd 是什么。如何让 B 班知道?

【问题讨论】:

  • 你确定你理解类吗?
  • 就像我说过的,我要最后一次说,get a book 并阅读它。你不知道基本的 C++,你需要。 -1 从现在开始,除非你的问题是关于理解书中的内容。
  • 这不是有效的 C++。我建议你买一本关于 C++ 的书,阅读它,输入并编译所有示例,并努力理解它们。
  • 我拿到了这本书,但它使用了我不懂的大词
  • @GMan:你以前对@Ramiz说过这个吗?我浏览了@Ramiz 最近的一些历史,没有看到你这么说,也许我只是错过了。我同意@Ramiz 似乎没有尽职尽责,至少尝试自己学习语言并且提出了不好的问题。如果这是屡犯者,那么他们可能会成为限时停赛的候选人。

标签: c++ class


【解决方案1】:

这是public: 而不是Public:。

因为dd 是A 的一部分,所以您需要A 的实例才能访问dd。

【讨论】:

  • 简短而准确的答案,避免对真正的意思下结论。
【解决方案2】:

这两个类没有任何关系;因为 B 无权访问任何 A 对象,所以它不能获取其成员的值。

如果您要通过值、引用或指针将 A 对象传递给 B 构造函数,则可以访问其 dd 成员,因为您已将其公开。

【讨论】:

  • +1。另外,将**P**ublic 更改为**p**ublic
【解决方案3】:

您需要有一个A 的实例,并将其传递给sss 方法才能访问此数据:

void sss(A a) { ff = a.dd; }

如果您只想拥有一个 dd 副本,而不是每个 A 实例一个副本,那么您必须将 dd 设为静态:

class A
{
public:
    static int dd;
};

class B
{
public:
    void sss() { ff = A::dd; }
    int ff;
};

【讨论】:

    【解决方案4】:

    也许通过传入一个 A 实例?

    class B:
    {
    Public:
        void sss(const A& a){ ff=a.dd; }
        int ff;
    }
    

    【讨论】:

      【解决方案5】:

      您的代码看起来不像 C++,但我会尝试回答您的问题。

      有几种可能性可以做你想做的事。我只挑一个容易理解的。

      做这样的事情:

      class B
      {
      public:
          void sss() { ff = a.dd; }
          int ff;
      
      private:
          A a;
      };
      

      但是,如果您不告诉我您真正想通过该课程实现什么,即该课程有哪些职责,这对您没有多大帮助。

      【讨论】:

        【解决方案6】:

        您提供的代码,...

        class A:
        {
        Public:
            int dd;
        }
        
        class B:
        {
        Public:
            void sss(){ ff=dd; }
            int ff;
        }
        

        ... 不是有效的 C++。

        您可以通过尝试编译它很容易地找到它。然后编译器会抱怨很多不相关的东西,但它的第一条消息会与A之后的多余冒号有关。当您删除它并再次编译时,它的第一条消息将与Public 相关,而不是正确的public(小写)。以此类推。

        语法正确的代码(仍会产生编译错误,但与基本语法无关):

        class A
        {
        public:
            int dd;
        };
        
        class B
        {
        public:
            void sss(){ ff=dd; }
            int ff;
        };
        

        假设您创建了类A 的五个实例,分别命名为a1、a2、a3、a4 和a5。每个这样的实例都有一个成员dd,因此您可以将这五个成员称为a1.dd、a2.dd、a3.dd、a4.dd 和a5.dd。

        现在您创建一个B 实例,将其命名为“b”。你打电话给b.sss()。该成员函数有效地执行b.ff=dd。或者,如果它是有意义的并被编译器接受的话。但不能,a1.dd、a2.dd、a3.dd、a4.dd、a5.dd中的哪一个被引用了?

        所以,既然这是C++中一个很基础的概念,你需要一个好的C++ textbook,比如Bjarne的最新,从头开始。

        另外,由于 C++ 是一种非常复杂的编程语言,最好从一些更简单的语言开始,比如 Java,甚至更简单的语言,比如 JavaScript 或 Python。我推荐 Python。它在细节上与 C++ 非常不同,但两种语言都是“常规”编程语言。使用 Python,您将了解决策结构、函数和事物,包括类与实例。

        干杯,

        【讨论】:

          猜你喜欢
          • 2021-08-08
          • 1970-01-01
          • 1970-01-01
          • 2013-11-21
          • 1970-01-01
          • 1970-01-01
          • 2021-02-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多