c++,改代码,已经凌乱了。

img


看看错误在哪怎么改才能运行成功。
不是很理解。
大家看看帮我指出错误。

很好的问题,知识点还挺多,
1:构造函数了解一下,以及private和public的区别,怎么可以调用到函数
2:引用和const了解一下,以及构造函数初始化(默认构造函数,拷贝构造函数,赋值构造函数),成员变量在不同的地方初始化的差异。
3:基本语法问题,函数的返回值,const修饰函数时有什么要求。
4:类对象的定义,以及定义时执行的相关构造函数,以及类对象的成员函数的调用。
5:函数拷贝传参也了解一下。


class XX
{
private:
    int a;   //这是值
    int& b;  //这是引用 注意引用的特性 定义时初始化啊
    const int c; //这是const类型啊  定义时初始化
public: //这两个函数定义成私有的话你对外就用不成啊  要定义成public
    void setA(int i) { a = i; }

    XX(int i) :b(a), c(0) { a = i; }  //还有 构造函数  不要返回值啊
    //构造函数啊  你要定义成public才能对外用  注意成员参数的特性  初始化的方式啊
public:
    XX(): a(0), b(a),c(1) { //构造函数啊  b,和c不能写在函数块中初始化,因为定义时要初始化啊,可以这样写
       // a = b = 0;
    }
    
    XX(int i, int j, int k):b(j),c(k) { //同上 这里b是引用,然后 函数的拷贝传参,b就无效了  是不对的想用指针的话定义成int *
        a = i;
     //   b = j;
    //    c = k;
    }

    void setB(int i) const {  //你上面已经定义了一个setA 定义两个你想干嘛
            //你把成员函数修饰为const,你内部修改成员变量想干嘛
        printf("%d %d %d\n", a, b, c);
    }
};

int main(void)
{
    //几种初始化方式 调用对应的构造函数  这里的构造函数要对 并且是对外提供的public啊 private没用
    XX x1; 
    XX x2(2);
    XX x3(1, 2, 3);
    //只能调用public的函数啊
    x1.setA(3);
    x1.setB(0);
    x2.setB(0);
    x3.setB(0);

    return 0;
}

贴出报错信息。最后一句可能应该为x1.set
加上一个点代表调用方法

在定义的类不能直接对变量赋值,所以int a=0;是不对的,还有就是SetA 是函数的重载?那应该形参个数不同,或者类型不同。