我在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();
}
答案 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)