求C++高手:帮我改一下这个程序的错误:(最好同时有原程序出错地方的注释,和改动后正确的程序),谢亲了
程序如下:classX{private:inta=0;int&b;constintc;voidsetA(inti){a=i;}X(inti){a=i;}public:in...
程序如下:
class X{
private:
int a=0;
int &b;
const int c;
void setA(int i){a=i;}
X(int i){a=i;}
public:
int X(){a=b=c=0;}
X(int i,int j;int k){a=i;b=j;c=k;}
static void setB(int k){b=k;}
setC(int k)const{c=c+k;}
};
void main(){
X x1;
X x2(3);
X x3(1,2,3);
x1.setA(3);
} 展开
class X{
private:
int a=0;
int &b;
const int c;
void setA(int i){a=i;}
X(int i){a=i;}
public:
int X(){a=b=c=0;}
X(int i,int j;int k){a=i;b=j;c=k;}
static void setB(int k){b=k;}
setC(int k)const{c=c+k;}
};
void main(){
X x1;
X x2(3);
X x3(1,2,3);
x1.setA(3);
} 展开
2个回答
展开全部
第一个:int a=0; 类不能在类里赋值;在类外面写int X::a = 0这样来;
第二个:int X(){a=b=c=0;} 这个根据你主函数第一个条创建一个无参对象,应该是个无参构造函数,所以呢前面int去掉改为:X(){a=b=c=0;};
第三个:X(int i,int j;int k){a=i;b=j;c=k;} 括号里的分号改成逗号- -!;
第四个:setC(int k)const{c=c+k;}这个函数没有写返回类型,即使不需要也应该写上void;
第五个:x1.setA(3); 这样访问方式是错误的,X类创建的对象x1是不能直接访问setA函数的,因为你把setA函数放在了私有(private)下;
还有一个错误:const int c; 你将c定义为常量,而后面多次对c做了修改都有问题;如果需要修改c,那么不要把c定义为const;
现在没法在机器帮你运行,你照我说的改了肯定OK啦。
第二个:int X(){a=b=c=0;} 这个根据你主函数第一个条创建一个无参对象,应该是个无参构造函数,所以呢前面int去掉改为:X(){a=b=c=0;};
第三个:X(int i,int j;int k){a=i;b=j;c=k;} 括号里的分号改成逗号- -!;
第四个:setC(int k)const{c=c+k;}这个函数没有写返回类型,即使不需要也应该写上void;
第五个:x1.setA(3); 这样访问方式是错误的,X类创建的对象x1是不能直接访问setA函数的,因为你把setA函数放在了私有(private)下;
还有一个错误:const int c; 你将c定义为常量,而后面多次对c做了修改都有问题;如果需要修改c,那么不要把c定义为const;
现在没法在机器帮你运行,你照我说的改了肯定OK啦。
追问
不行,我在vc++6.0上还有一个错误,在visual2010上有一个失败,在eclipse上有11个错误
展开全部
class X{
private:
int a=0; //成员变量在构造函数中初始化
int &b;
const int c;
void setA(int i){a=i;}
X(int i){a=i;}
public:
int X(){a=b=c=0;} //构造函数不应该有返回值,int要去掉,
//且引用类型和const类型用初始化表进行初始化
X(int i,int j;int k){a=i;b=j;c=k;} //引用类型和const类型用初始化表进行初始化
// static void setB(int k){b=k;} //static函数只能访问static成员变量或全局变量
setC(int k)const{c=c+k;} //返回值类型没有的时候用void,另外c为const类型,不能修改
//即便c不是const,把函数声明为const就使得在该函数体
//内不能修改类成员变量
};
void main(){
X x1; //无参构造函数不可用,原因如上
X x2(3); //可以构造
X x3(1,2,3); //构造函数有问题,无法构造
x1.setA(3); //类外不能访问私有成员函数
}
private:
int a=0; //成员变量在构造函数中初始化
int &b;
const int c;
void setA(int i){a=i;}
X(int i){a=i;}
public:
int X(){a=b=c=0;} //构造函数不应该有返回值,int要去掉,
//且引用类型和const类型用初始化表进行初始化
X(int i,int j;int k){a=i;b=j;c=k;} //引用类型和const类型用初始化表进行初始化
// static void setB(int k){b=k;} //static函数只能访问static成员变量或全局变量
setC(int k)const{c=c+k;} //返回值类型没有的时候用void,另外c为const类型,不能修改
//即便c不是const,把函数声明为const就使得在该函数体
//内不能修改类成员变量
};
void main(){
X x1; //无参构造函数不可用,原因如上
X x2(3); //可以构造
X x3(1,2,3); //构造函数有问题,无法构造
x1.setA(3); //类外不能访问私有成员函数
}
追问
要是能帮我改埋就更加好了
追答
#include
class X{
private:
int a;
int &b;
/*const */int c;
void setA(int i){a=i;}
//构造函数一般声明为public,当然也有声明为私有的,这个你去看看什么是单例类
public:
X(int i):b(a){a=i;c=0;} //a is b
//b是引用类型,必须使用初始化列表进行初始化
//c是const的华,也应该使用初始化列表进行初始化
public:
//X(){a=b=c=0;}
X():b(a){a=0;c=0;} //a is b
//X(int i,int j,int k){a=i;b=j;c=k;}
X(int i,int j,int k):b(a){a=i;c=k;}
void setB(int k){setA(k);} //setA是私有函数,在类外不能调用,但是在类成员内部可以调用
void setC(int k)/*const*/{c+=k;} //如果函数声明为const,那么类成员的值就不能在函数内改变
void print(){cout<<"a="<<a<<" "<<"b="<<b<<" "<<"c="<<c<<endl;}
};
void main(){
X x1;
//x1.setA(3);//setA是私有函数,在类外不能调用,但是在类成员内部可以调用
x1.setB(3); //通过setB函数调用setA函数
x1.print();
X x2(3); x2.print();
X x3(1,2,3);
x3.print();
}
希望对你有帮助
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询