看代码回答下列问题:
class Graph
{
public: 
    Graph() { s_gCount++; } 
    ~Graph() { s_gCount--;} 
    virtual int drawOut() = 0; 
    static int getTotalCount() { return s_gCount; } 
protected: 
    int m_x; 
    int m_y; 
    static int s_gCount; 
}; 
1)这个类能否使用,为什么
2)上述代码如有错误请指出
3)如果有一个Rectangle类公共继承该类,那么s_gCount对Rectangle的成员属性是什么?
4)对Graph及其子类的计数是否有效,如果无效应该采取什么措施? 
5)请画出该类的内存布局结构示意图,如有修正,请只画出修正后的
B: ostream& operator<<(ostream& os,const A& a){
 os<<a.data;
 在运算符重载的前提下 os 是一个对象么?? 是不是相对于 cout  跪求各位前辈解答!!!!!!!

解决方案 »

  1.   

    1. 不能,因为drawOut() = 0;  是虚函数。
    2. 有错,static int getTotalCount() { return s_gCount; }  static函数不能访问非static成员。
    3. protected
    4. 无效,每一个Graph只会被构造一次,也只被析构一次,在对象的生存期只s_gCount只为1,将s_gCount成员使用static声明。
    5. 贴不了图。B,是。不明白什么是相对于。
      

  2.   

    1.virtual int drawOut() = 0;是一个纯虚函数,说明该类似一个抽象基类,只能被继承。
    2.首先,构造函数和虚构函数不能定义为public;
       其次,static数据成员应该在类的外部定义且需要初始化;
    3.public方式继承的话保留基类的访问权限,故为protected
    4.无效,即使是派生类也是一样。
    5.不难,只是要注意static类型的成员不属于类,所以无需画出了。
    B:重载<<,一个参数是对ostream对象的引用,在os是产生输出,作用相当于没重载前段cout。自己的解答,欢迎讨论。
      

  3.   


    class Graph
    {
    public:  
    Graph(){ s_gCount++; }  
    ~Graph() { s_gCount--;}  
    virtual int drawOut() = 0;  
    static int getTotalCount() { return s_gCount; }  
    protected:  
    int m_x;  
    int m_y;  
    static int s_gCount;  
    };int Graph::s_gCount = 0;class Rectangel : public Graph
    {
    public:
    int drawOut() 

    cout<<"实现drawOut"<<endl;
    return 0;
    }
    };int _tmain(int argc, _TCHAR* argv[])
    {
    if(1)
    {
    cout<<"构造Rectangel对象:rect1"<<endl;
    Rectangel rect1;
    cout<<"rect1调用getTotalCount值:"<<rect1.getTotalCount()<<endl; cout<<"构造Rectangel对象:rect2"<<endl;
    Rectangel rect2;
    cout<<"rect1调用getTotalCount值:"<<rect1.getTotalCount()<<endl;
    cout<<"rect2调用getTotalCount值:"<<rect1.getTotalCount()<<endl;
    }
    cout<<"rect1和rect2对象的生命期结束"<<endl;
    cout<<"构造Rectangel对象:rect3"<<endl;
    Rectangel rect3;
    cout<<"rect3调用getTotalCount值:"<<rect3.getTotalCount()<<endl; return 0;
    }运行结果:构造Rectangel对象:rect1
    rect1调用getTotalCount值:1
    构造Rectangel对象:rect2
    rect1调用getTotalCount值:2
    rect2调用getTotalCount值:2
    rect1和rect2对象的生命期结束
    构造Rectangel对象:rect3
    rect3调用getTotalCount值:1
    请按任意键继续. . .
      

  4.   

    上面有个地方写错了:改成为下面的 cout<<"rect2调用getTotalCount值:"<<rect2.getTotalCount()<<endl;
      

  5.   

    1)这个类能否使用,为什么
    不能,该类拥有纯虚函数,该类为抽象类,不可实例化2)上述代码如有错误请指出
    眼拙没看到。。
    3)如果有一个Rectangle类公共继承该类,那么s_gCount对Rectangle的成员属性是什么?
    public继承,对成员的属性没有改变,所以还是protect
    4)对Graph及其子类的计数是否有效,如果无效应该采取什么措施? 
    我觉得有效,不过最好在类外初始化一下 
    5)请画出该类的内存布局结构示意图,如有修正,请只画出修正后的
    - -B: ostream& operator<<(ostream& os,const A& a){
     os<<a.data;
     在运算符重载的前提下 os 是一个对象么?? 是不是相对于 cout 
    是 
    看来我面试过不了。。