如何在 C++ 中从 类 开始

How to start with Classes in c++

我在 classes 和 C++ 对象中,我在理解 class 的减速概念时遇到困难,为此我制作了一个未编译的小程序,有人会指导我吗?

#include <iostream>

using namespace std;

class myClass{
    friend increment(myClass, int);
  private:
    int topSecret;
  public:
    myClass(){
        topSecret = 100;
    }
    void display(){
        cout<<"The value of top Secter is"<<topSecret;
    }
  };

   void increment(myClass A, int i){
       A.topSecret += i;
   }

   int main() {
     myClass x;
     x.display();
     increment(x,10);
     x.display();

     }

改变

friend increment(myClass, int);

friend void increment(myClass &, int);

这应该可以修复您的编译错误。


要修改传递给函数的原始对象,请声明函数以获取引用:

void increment(myClass A, int i){

void increment(myClass &A, int i){

Arun 的回答向您展示了如何修复编译错误,但这不是您设计 class 的方式。定义非成员好友函数来访问您的内部数据通常会导致维护问题和错误。您最好将 increment 声明为 public 成员函数,或者为您的 class:

定义 getter 和设置器
class myClass{
private:
    int topSecret;
public:
    //use initialization list instead of setting in constructor body
    myClass() : topSecret(100) {}

    //getter, note the const
    int GetTopSecret() const { return topSecret; }
    //setter, non-const
    void SetTopSecret(int x) { topSecret = x; }

    //member version
    void increment (int i) { topSecret += i; }
};

//non-member version with setter
//note the reference param, you were missing this
void increment(myClass &A, int i){
    A.SetTopSecret(A.GetTopSecret() + i);
}
  1. 在 class 定义中添加 void bebore 增量,如 Arun A.S 所说。
  2. 您不能在增量函数中更改 A.topSecret 因为您按值获取对象,所以您只需更改临时对象,改用 void increment(myClass &A, int i)