如何从c ++开始使用Classes

时间:2015-02-12 09:00:49

标签: c++ class object

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

#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();

     }

3 个答案:

答案 0 :(得分:2)

更改

friend increment(myClass, int);

friend void increment(myClass &, int);

这应该可以解决你的编译错误。


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

void increment(myClass A, int i){

void increment(myClass &A, int i){

答案 1 :(得分:2)

Arun的回答向您展示了如何修复编译错误,但这不是您应该如何设计类的。定义非成员朋友函数以访问内部数据通常会导致维护问题和错误。您最好将increment声明为公共成员函数,或者为您的班级定义getter和setter:

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);
}

答案 2 :(得分:1)

  1. 在类定义中添加void bebore增量,如Arun A.S所说。
  2. 您无法在增量函数中更改A.topSecret,因为您按值获取对象,因此您只需更改临时对象,而使用void increment(myClass&amp; A,int i)