c++复制构造函数、赋值操作符和析构函数

[code=c]

1(30).何时使用复制构造函数?

2(20).何时使用析构函数?析构函数的作用?

3(20).类何时需要定义自己的复制构造函数?何时需要定义复制操作符?

4(20).解释ifstream file="filename";的错误原因。

5(20).A item=string("789");item初始化的成功与失败分别说明了类A的构造函数的什么特点。

6(40).下面两条语句分别使用了几种构造函数?如何使用的?分别使用了几次复制构造函数?(其中类A中有形参为string的构造函数)
    vector<string> svec(5);
    A a[]={string("aa"),string("b"),A()};

7(20).下面第二个初始化不能编译。可以从vector的定义得到什么推断?
    vector<int> v1(42);
    vector<int> v2=42;

8(30).假定Point为类类型,该类类型有一个复制构造函数,指出下面程序段中每一个使用了复制构造函数的地方:
point global;
point foo(point arg)
{
point local=arg;
point *heap=new point(global);
*heap = local;
point pa[ 4 ] ={local, *heap );
return *heap;
}

9(50).对于如下的类的简单定义,编写一个复制构造函数复制所有成员。复制pstring指向的对象而不是复制指针
stryct NoName{
    NoName():pstring(new std::string),i(0),d(0){}
private:
    std::string *pstring;
    int i;
    double d;
};
再分别实现复制操作符和析构函数。

10(20).那个类定义可能需要一个复制构造函数?是否需要赋值操作符?
(a)包含四个float成员的Point3w类。
(b)Matrix类,其中,实际矩阵在构造函数中动态分配,在析构函数中删除。
(c)Payroll类,在这个类中为每个对象提供唯一ID.
(d)Word类,包含一个string和一个以行列位置对为元素的vector。

11(20).复制构造函数的形参并不限制为const,但必须是一个引用。解释这个限制的基本原理,
例如,解释为什么下面的定义不能工作。
sales_item(const sales_item rhs);

12(20).如何防止类的复制?如何防止友元和成员的复制?

13(20).为什么定义了复制构造函数就必须定义默认构造函数?


//三法则:如果需要析构函数,则需要赋值操作符和复制构造函数
//编译器会为每个类合成析构函数,先运行定义的析构函数,再运行合成析构函数。合成析构函数按对象创建的逆序撤销每个非static成员。

[/code]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值