一个关于C++类和对象的问题,请高手解答一下吧

来源:百度知道 编辑:UC知道 时间:2024/06/08 14:54:23
#include<iostream.h>
class M{
public:
M(){a=b=0;}
M(int i,int j){a=i;b=j;}
void print(){cout<<a<<","<<b<<endl;}
private:
int a,b
};
void main()
{ M m[2][4];
int x=10,y=10;
for(int i=0;i<2;i++)
for(int j=0;j<4;j++)
m[i][j]=M(x+=2,y+=10);//??M(x+=2,y+=10)这是什么用法?
M(*pm)[4](m);
for(i=0;i<2;i++)
{
for(int j=0;j<4;j++)
(*(*(pm+i)+j)).print();
cout<<endl;
}
}
类的构造函数能直接在主函数中调用?

指令
m[i][j]=M(x+=2,y+=10);
为赋值语句,表示对变量m赋值。由于变量m为类型M的数组,所以这个赋值语句的等号右边为变量m的类型名和括号中的值。上述指令类似于下面的赋值语句:
int i = int(3);
其中变量i为整型,等号右边为类型int和括号中的值3,最后变量i的值为3。同理:
char c = char('A');
long l = long(1000);
其实,举例的赋值语句的这个写法可以简写为:
int i = 3;
char c = 'A';
long l = 1000;
甚至,如果类M还定义了单个参数的构造函数,假设为M(int i) { a = i; b = i; }
那么类M的对象的赋值语句可以简写成为:
M m = 10;
而当类M的构造函数包含一个以上参数时,类M的对象的赋值语句就不能简写,但可以写为如下形式:
M m = M(10,11);
至于,指令中的x+=2和y+=10,则表示分别将x和y自加了2和10,再传入类M的构造函数中。

M(x+=2,y+=10)
先引用后赋值,这是C语言的优越性之一,非常灵活,相当于:
M(x,y)
x+=2;
y+=10;

M(X+=2,Y+=10)是调用构造函数M(),用X+=2,Y+=10对a,b初始化

构造函数不用手工调用,当你创造了一个对象时,它的构造函数也就自动调用了。所以,一般是不能直接调用的——没有对象,构造函数不能调用。有了对象,构造函数已经调用了,无需也不能再次调用。

对于M(x+=2,y+=10)是什么的问题,楼上的都已经说得很清楚了。
这确实体现了C++的灵活性,但是这不是一种很好的风格,不易阅读。
个人觉得分开写比较好,看个人了。

x+=2;y+=10;
M(x,y)

m+=2
m=m+2