标题:C++多态性基本概念 包括虚函数和纯虚函数
只看楼主
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
得分:0 
回复 19楼 Devil_W
怎么不可以了,上面的私有的。
子类不可以访问。
而父类通过STATIC 来进行构造。
那里不可以了,,,

用心做一件事情就这么简单
2012-02-25 11:23
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
得分:0 
程序代码:
#include "StdAfx.h"
#include <iostream>

using namespace std;

class A
{
   
public:
    static A* f()
    {
        return new A;
    }
private:
    A()
    {
        cout<<"construct"<<endl;
    }

};
class B:public A
{
public:
    B()
    {
        cout<<"B constrcut"<<endl;
    }
};
int main()
{
    cout << "Hello world!" << endl;
    //A d(0,0);
    A *a = A::f();

    //B c;
    return 0;
}
这样可以实现符合你的要求了吧。。。。
虽然不是非常好,但貌似可以了。。。

用心做一件事情就这么简单
2012-02-25 22:07
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
得分:0 
以下是引用小鱼儿c在2012-2-25 22:07:14的发言:

#include "StdAfx.h"
#include <iostream>

using namespace std;

class A
{
   
public:
    static A* f()
    {
        return new A;
    }
private:
    A()
    {
        cout<<"construct"<<endl;
    }

};
class B:public A
{
public:
    B()
    {
        cout<<"B constrcut"<<endl;
    }
};
int main()
{
    cout << "Hello world!" << endl;
    //A d(0,0);
    A *a = A::f();

    //B c;
    return 0;
}这样可以实现符合你的要求了吧。。。。
虽然不是非常好,但貌似可以了。。。




程序代码:
#include <iostream>

using namespace std;

class A
{
public:
    static A* f()
    {
       return new A;
    }
      private:
      A()
       {
           cout<<"construct"<<endl;
       }

  };
class B:public A
{
public:
      B():A(*A::f())
       {
          cout<<"B constrcut"<<endl;
       }
};
int main()
{
      cout << "Hello world!" << endl;
      B b();
      return 0;
}


你觉得A类可以不可以被继承?

反正我是写出来了。A是可以被继承的。
2012-02-26 11:46
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
得分:0 
回复 23楼 Devil_W
程序代码:
#include <iostream>

using namespace std;

class A
{
public:
    static A* f()
    {
       return new A;
    }
      private:
      A()
       {
           cout<<"construct"<<endl;
       }
       
       A(A&)
       {
           cout<<"不给你调用复制构造函数"<<endl;
       }

  };
class B:public A
{
public:
      B():A(*A::f())
       {
          cout<<"B constrcut"<<endl;
       }
       void print()
       {
           cout<<"nihao"<<endl;
       }
};
int main()
{
      cout << "Hello world!" << endl;
      B b;
      b.print();
      return 0;
}


这样呢,不给你调用复制构造函数呢。

我开始因为复制构造函数是私有的,原来是public的啊。

还可以这样构造B。

用心做一件事情就这么简单
2012-02-26 12:00
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
得分:0 
以下是引用小鱼儿c在2012-2-26 12:00:34的发言:

#include <iostream>

using namespace std;

class A
{
public:
    static A* f()
    {
       return new A;
    }
      private:
      A()
       {
           cout<<"construct"<<endl;
       }
      
       A(A&)
       {
           cout<<"不给你调用复制构造函数"<<endl;
       }

  };
class B:public A
{
public:
      B():A(*A::f())
       {
          cout<<"B constrcut"<<endl;
       }
       void print()
       {
           cout<<"nihao"<<endl;
       }
};
int main()
{
      cout << "Hello world!" << endl;
      B b;
      b.print();
      return 0;
}

这样呢,不给你调用复制构造函数呢。

我开始因为复制构造函数是私有的,原来是public的啊。

还可以这样构造B。



ok,姑且认为不可以被继承了。
2012-02-26 13:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-361400-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.559689 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved