`

c++的学习笔记之二

阅读更多

1. 类中定义的静态变量在编译时没有出错,但是在链接时出现错误,原因是该静态变量没有初始化。

class Obj {

public:

    //...

private:

    static vector<string> vstr;

};

 

vector<string> Obj::vstr;

 

这样在别的地方就可以使用该静态变量了,具体使用方法很简单,只要Obj::vstr 即可。

 

2. 一个类中声明了一个指针后,要记得初始化时将此指针赋为空值,在使用时先判断此指针是否为空,否则在使用一个未定义的指针时,会有错误出现;另外在重置指针时,不仅要回收new对象,而且最好将指针赋为NULL;

 

3. 在一个类中malloc或者new出来的空间,只需在此类的析构函数中进行回收,另外,将所使用的容器(vector, list等)清空即可。

 

4. 使用对象的get方法返回的数据,最好能使用引用返回。下附函数返回说明:

1)主函数main的返回值:这里提及一点,返回0表示程序运行成功。

 

2)返回非引用类型:函数的返回值用于初始化在跳用函数出创建的临时对象。用函数返回值初始化临时对象与用实参初始化形参的方法是一样 的。如果返回类型不是引用,在调用函数的地方会将函数返回值复制给临时对象。且其返回值既可以是局部对象,也可以是求解表达式的结果。

 

3)返回引用:当函数返回引用类型时,没有复制返回值。相反,返回的是对象本身。

 

int &func(int& a) 
{ 
  return a; 
} 

int main(int argc , char* args[]) 
{ 
    
  int a=0; 
  int b=func(a); 
   printf("&a=0X%08X,&b=%08X\n",&a,&b); 

}

 

运行结果:

   &a=0X0012FF7C,&b=0012FF78

这里可以看到,返回变量的地址和传入地址是不同的。变量b是main函数中自己的栈中生成的。

 

int& c=func(a)

那么c就是指向a,

a变化那么c也跟着变化,

 

在上面b的情况,

是重新分配了一个空间,

因此不会同步变化。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics