知道美河 | 上传资料 | VIP申请 | 精品课程 | 资料搜索 | 问题反馈 | 会员手册 | 积分消费 | 积分充值 | 帐号保护
美河学习学习在线赞助VIP

美河学习在线(主站) eimhe.com

 找回密码
 建立账号
查看: 10485|回复: 7

求一道C++迷惑题目的解答

[复制链接]
发表于 2009-12-10 10:02:15 | 显示全部楼层 |阅读模式
//请问以下的代码输出的c1,c2,c3的结果,
// 恳请给点解释,非常感谢。
//我尝试过编译运行,在编译器通过,在“建立”的时候报错。

#include <iostream>
using namespace std;

int c1=0, c2=0, c3=0;

class A
{
public: A() {c1++;}
                A(const A&) {c2++;}
                ~A() {c3++;}
};

const A foo(const A c)
{
        A ab= A(c);
        return ab;
}

int main()
{
        A a;
        A d = foo(a);
        cout<<c1<<"  "<<c2<<"  "<<c3<<endl;
        return 0;
}

评分

1

查看全部评分

 楼主| 发表于 2009-12-10 10:57:27 | 显示全部楼层
//哪位大虾帮忙看看这个调用的时候,里面的过程是怎么样的?
//请给点解释,谢谢

#include <iostream>
using namespace std;

class A{
public:
        A(){f();}
        virtual void f(){printf("A");}
};

class B: public A{
public:
        B(){f();}
        virtual void f(){printf("B");}
};

int main()
{
        B myB;
        A *myBP;
        B *myBP2;
        myBP=new B();
        myBP2=new B();
        delete myBP;
        delete myBP2;
        return 0;
}

评分

1

查看全部评分

发表于 2009-12-10 20:48:57 | 显示全部楼层
能力有限,第一题还没想通 你可以在A d = foo(a);处设置个断点 单步调试看下程序的执行过程.
第二题过程如下
因为B由A派生而来,在生成B的实例的时候会先调用父辈的构造函数,
由于f()为虚函数,所以A,B构造函数中对f()的调用均为自己的f()函数,
那么 B myB 会先调用 A的构造函数 打印 A 然后调用自己的构造函数 打印 B
后面两个new B()过程也是如此.
发表于 2009-12-23 12:02:47 | 显示全部楼层
class A
{
public: A() {c1++;}
                A(const A&) {c2++;}
                ~A() {c3++;}
};
现在C++支持一个类里两个构造函数了?
发表于 2009-12-23 20:41:33 | 显示全部楼层
原帖由 极品黑公子 于 2009-12-23 12:02 发表
class A
{
public: A() {c1++;}
                A(const A&) {c2++;}
                ~A() {c3++;}
};
现在C++支持一个类里两个构造函数了?

构造函数可以重载啊
发表于 2010-1-2 13:34:00 | 显示全部楼层
第二题有人回答了...
我答第一题好了..
首先..这个程序我直接复制到vs2005里面..是可以运行的..连接的话你看看项目设置有没有问题吧..
输出是1 3 2
首先1,就是这个程序在 A a;的时候,调用了一次class A的无参构造函数.
然后3,是复制构造函数.
由于const A foo(const A c)函数的参数不是引用,所以A d = foo(a);时需要值复制,一次
A ab= A(c);两次
由于const A foo(const A c)的返回值也不是引用,所以 return ab;需要复制值,三次
最后是2,析构函数调用次数
const A foo(const A c)
{
        A ab= A(c);
        return ab;
}
参数const A c和局部变量A ab都需要在这个函数执行完毕时析构,故两次..

评分

1

查看全部评分

发表于 2011-6-28 06:59:08 | 显示全部楼层
您需要登录后才可以回帖 登录 | 建立账号

本版积分规则

 
QQ在线咨询

QQ|小黑屋|手机版|Archiver|美河学习在线 ( 浙网备33020302000026号 )

GMT+8, 2025-5-9 21:56

Powered by Discuz!

© 2001-2025 eimhe.com.

快速回复 返回顶部 返回列表