C++笔记
来源:互联网 发布:工作室网络施工方案 编辑:程序博客网 时间:2024/06/17 17:26
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;
}
- C - 笔记
- c笔记
- c笔记
- C 笔记
- c 笔记
- C笔记
- C笔记
- C笔记
- C 笔记
- C 笔记
- C笔记
- c 笔记
- C笔记
- C笔记
- C笔记
- C++/C笔记
- 笔记(C/C++)
- C++/C学习笔记
- LoadRunner的协议选择2
- popupWindow的使用心得
- Extjs4.1文档example学习之 Array Grid Example
- 浅谈ubuntu下环境变量
- 【VC皮肤】SkinSharp 1.0.6.6的使用
- C++笔记
- QT编译出现stray '\343' in program错误
- java中instanceof的用法
- cocos2d-x中的单例模式运用
- Java单例模式笔记
- mysql 多列索引疑问
- TCP/IP理解(转)
- windows c++创建GUID的方法
- php 重要工具函数