注册 登录
编程论坛 C++教室

指针和new的问题

ac6300776 发布于 2010-05-10 22:25, 1137 次点击
#include<iostream>
class claA(
public:
double x,y;
static int num;     //静态数据成员,记录通过构造函数生成对象的个数
claA(){
x=0;y=0;
num++;             //每生成一个对象,静态数据成员num增加1
}
claA(double x0,double y0){
x=x0;y=y0;num++;
}
static void staFum(){          //静态函数成员
cout<<"current_num="<<num<<endl;
}
};
int claA::num=0;
void main(){
claA obj(1.2,3.4),*p;
cout<<"claA::num="<<claA::num<<"\t";
claA::staFun();
cout<<"obj.num="<<obj.num<<"\t";
obj.staFun();
claA A[3];          //说明具有3个对象的数组,将3次调用构造函数
cout<<"claA::num="<<claA::num<<"\t";
claA::staFun();
p=new claA(5.6,7.8);
cout<<"claA::num="<<claA::num<<"\t";
claA::staFun();
cout<<"p->num="<<p->num<<"\t";
p->staFun();
}
程序运行后,屏幕显示结果为:
claA::num=1      current_num=1
obj.num=1        current_num=1
claA::num=4      current_num=4
claA::num=5      current_num=5
p->num=5         current_num=5


问题:
1,claA obj(1.2,3.4),*p;为什么*P没有初始化,我的计算结果比正确结果多1,能详细说说怎么回事吗
2,p=new claA(5.6,7.8),解释一下
3,claA::num=1      current_num=1   它们之间为什么没换行,即为什么不是上下两行,而在一行   
5 回复
#2
cnfarer2010-05-11 06:52
1.claA *p;只是产生一个指针p,这个指针可以指向一个claA类型的对象。就象int *a;一样,只产生一个指针,但现在还不知道它指向哪里!
   2.创建一个claA对象,并使用claA(double x0,double y0)函数为其初始化。
   3.只有cout<<endl;或cout<<'\n';时才会换行。
#3
ac63007762010-05-11 10:59
我明白了,谢谢
#4
apull2010-05-11 11:01
顶楼上。。
#5
最近不在2010-05-11 12:04
// Note:Your choice is C++ IDE
#include <iostream>
using namespace std;

class A
{
public:
    static int count1;      //用来统计调用默认构造函数次数
    static int count2;        //用来统计调用带参构造函数次数
    A()
    {
        m_x = 0;
        m_y = 0;
        count1++;
    }
   
    A(double x, double y)
    {
        m_x = x;
        m_y = y;
        count2++;
    }
   
    static void Print();
   
private:
    double m_x;
    double m_y;   
};
int A::count1 = 0;
int A::count2 = 0;
void A::Print()
{
    cout<<"调用了默认构造函数"<<count1<<"次"<<endl;
    cout<<"调用了带参构造函数"<<count2<<"次"<<endl;
}

int main()
{
    A obj(1.1, 1.2);   //调用带参构造函数
    A::Print();  
   
    A a[3];     //申明数组对象,调用3次默认构造函数
    A::Print();
   
    A b[3] = {A(1.5, 1.9), A(2.1, 2.2), A(3.1, 3.2)};   //申明数组对象,调用3次带参数构造函数
    A::Print();
   
    A *p;                //声明指针对象,指向位置未知
    p = new A(5.6,7.8);     //指针最好在要用时时声明,紧跟初始化
    A::Print();
   
    A *q = new A;    //给q分配空间指向A,调用无参构造函数初始化指针q指向对象
    A::Print();   
        
    return 0;
}
#6
南国利剑2010-05-12 11:00
顶2楼
1