回 帖 发 新 帖 刷新版面

主题:求求各位高手帮我看看以下程序有什么错?如何改

(1)使用静态成员函数
#include<iostream.h>
#include<string.h>
class person{
public:
    char m_strName[20];
    long m_ID;
public:
    person(char*strName,long ID){strcpy(m_strName,strName);m_ID=ID}
    static long GetID() { return m_ID;}
};
void main()

    person person1("LiuJun",1101640524);
    cout<<"ID="<<person∷GetID()<<'\n';
}

(2)派生类的构造函数调用基类的构造函数据

#include<iostream.h>
class point

protected: 
    int x,y;
public: 
    point(int a ,int b) { x=a;y=b }
    int getX() { return x; }
    int getY() { return y; }
};
class circle : public point
{
protected;
    int radius;
public:
    circle(int a=0, int b=0, int r=0){radius=r; }
    int getRadius() { return radius; }
};
void main()
{
    circle c(100,150,200);
    cout<<"x="<<c.getX()<<" ,y="<<c.getY()<<" ,radius="<<c.getRadius()<<end;
}

(3)关于常对象和常对象成员

#include<iostream.h>
class sample

private:
    int n;
public:
    sample(int x) {n=x;}
    void setValue(int x) { n=x; }
    void Display() { cout<<"n="<<n<<entl;}
};
void main()
{
    const Sample a(100);
    a.SetValue(0);
    a.Dispiay();
}












回复列表 (共4个回复)

沙发

#include<iostream>
#include<string>
using namespace std;
class person{
public:
    char m_strName[20];
       static long m_ID;
public:
    person(char*strName,long ID){strcpy(m_strName,strName);m_ID=ID;}
    static long GetID() { return m_ID;}
};long person::m_ID=0;
void main()

    person person1("iuJun",101640524);
    cout<<"D="<<person::GetID()<<'\n';
}
把m_ID改为静态数据成员,另外加一条静态数据成员初始化的语句就可以了

板凳

类常对象我的理解是:这个对象中的所有成员在初始化(构造函数)中都已经固定好,其提供的所有方法都不能在更改成员变量。所以SetValue这个方法就不该出现。
class Sample

private:
    int n;
public:
    Sample(int x) {n=x;}
    //void SetValue(int x);
    void Display() const;
};
//void Sample::SetValue(int x)
//{
//    n = x;
//}
void Sample::Display() const
{
    cout<<"n = "<<n<<endl;
}

void main()
{
    const Sample a(100);
    //a.SetValue(0);
    a.Dispiay();
}

3 楼

派生类调用基类的构造函数是调用默认的构造函数。要达到lz的目的代码修改如下:
class point

protected: 
    int x,y;
public: 
    point();
    point(int a, int b);
    int getX() { return x; }
    int getY() { return y; }
};
point::point()
{
    x = 0;
    y = 0;
}
point::point(int a, int b)
{
    x = a;
    y = b;
}

class circle : public point
{
protected:
    int radius;
public:
    circle();
    circle(int a=0, int b=0, int c=0);
    int getRadius() { return radius; }
};
circle::circle()
{
    radius = 0;
}
circle::circle(int a, int b, int r)
: point(a,b)
, radius(r)
{
}

void main()
{
    circle c(100,150,200);
    cout<<"x="<<c.getX()<<" ,y="<<c.getY()<<" ,radius="<<c.getRadius()<<end;
}

4 楼

sorry,上面的代码中应该把基类和派生类的无参构造函数的声明和定义删掉,我提交时忘记了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册