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

[复制链接]
查看11 | 回复5 | 2008-8-18 10:18:07 | 显示全部楼层 |阅读模式
#include
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[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;

}
}
类的构造函数能直接在主函数中调用?

回复

使用道具 举报

千问 | 2008-8-18 10:18:07 | 显示全部楼层
指令m[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的对象的赋...
回复

使用道具 举报

千问 | 2008-8-18 10:18:07 | 显示全部楼层
m+=2m=m+2...
回复

使用道具 举报

千问 | 2008-8-18 10:18:07 | 显示全部楼层
构造函数不用手工调用,当你创造了一个对象时,它的构造函数也就自动调用了。所以,一般是不能直接调用的——没有对象,构造函数不能调用。有了对象,构造函数已经调用了,无需也不能再次调用。 对于M(x+=2,y+=10)是什么的问题,楼上的都已经说得很清楚了。 这确实体现了C++的灵活性,但是这不是一种很好的风格,不易阅读。 个人觉得分开写比较好,看...
回复

使用道具 举报

千问 | 2008-8-18 10:18:07 | 显示全部楼层
M(X+=2,Y+=10)是调用构造函数M(),用X+=2,Y+=10对a,b初始化...
回复

使用道具 举报

千问 | 2008-8-18 10:18:07 | 显示全部楼层
M(x+=2,y+=10)先引用后赋值,这是C语言的优越性之一,非常灵活,相当于:M(x,y)x+=2;y+=10;...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行