C++笔记

C++中的cast:

1) const_cast

2) dynamic_cast

3) static_cast

4) reinterpret_cast

C++中variable的definition, initialization, assignment

     direct-initialization:   int ival(1024);

     copy-initialization: int ival=1024;

这一点与C#等有一些不同。

C#在定义的同时有默认的初始化操作,如int ival;在C#中默认会初始化为0。而在C++中只是变量的definition.

对于build-in 类型,这两者可以认为没有区别,对于class type,这两者是不同的。对于class type只能使用direct initialization. 也就是说direct-initialization在内部调用的是构造函数,而copy-initialization在内部调用的是assignment操作。

另外一点就是理解C++中initialization(copy constructor)与assignment有一些不同:

1) 赋值操作是在两个已经存在的对象之间进行的,而初始化是要创建一个新的对象,并且其初值来源于一个已存在的对象。

2) 编译器会区分这两种情况,初始化的时候调用copy constructor, 如果类中没有拷贝构造函数,则编译器会提供一个默认的,这个默认的拷贝构造函数只是简单的复制类中的每个成员。赋值的时候调用重载的赋值操作符。

以string为例来说明initialization与assignment的区别:

class String

{

    public:

    String (const char* init);

    ~String;

    String(const String &that);

    String &operator=(const String &that);

    String &operator=(const char* str);

    void swap(String &that);

    friend const String operator+(const String &, const String  &);

    friend bool operator <(const String &, const String &);

    //...

    private:

    String(const char*, const char*);

    char s_; 

}

Initialization :

String::String(const char* init)

{

     if(!init) init="";

     s_=new char[strlen(init)+1];

     strcpy(s_, init);

}

Deconstructor:

String::~String()

{

   delete[] s_;

}

Assignment:

String &String::operator=(const char* str)

{

   if(!str) str="";

   char* tmp=strcpy(new char[strlen(str)+1],str);

   delete[] s_;

    s_=tmp;

    return *this;

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值