默认参数,存储的连续性

C++学习笔记2
默认参数

char* left(const char* str,int n=1);//参数n的默认值为1
调用参数时:str1=left(str);//返回第一个字符组成的字符串
                   str2=left(str,5);//返回前五个字符组成的字符串;

函数重载(函数多态)
是指可以有多个同名的函数;仅当函数基本上执行相同的任务,但使用不同形式的数据是,才采用函数重载;

void print(const char* str,int width);    //1
void print(double d,int width);          //2
使用:
print("wo are family",12);        //使用1
print(19.99,10);                         //使用2
将非const值赋给const变量是合法的,但反之是非法的;

函数模板

template<typename AnyType>
void  swap(AnyType &a,AnyType &b)
{
   AnyType temp;
   temp=a;
   a=b;
   b=temp;
}
swap(2,8);
swap(2.00, 5.1);
void swap(job&, job&);//非模板函数原型
template <typename T>
void swap(T &, T &)//模板原型
template<> void swap<job>(job &, job &);//显式具体化函数原型

如果有多个原型时,编译器在选择原型时,非模板版本优先于显式具体化和模板,而显式具体化优先于使用模板生成的版本;
单独编译
(1)头文件中长包含的内容:函数原型(protortype),使用#define或const定义的符号常量,结构声明,类声明,模板声明,内联函数;
(2)如果文件名包含在<>中,则C++编译器将在存储标准头文件的主机系统的文件系统中查找;如果文件名包含在
“ ”中,则编译器将首先查找当前工作目录或源代码目录(或其他目录,取决于编译器),如果没有在哪里找到头文件,则在标准位置查找。

存储的持续性、作用域和连续性
(1)变量作用域:局部变量作用域只在定义它的代码块中(由花括号括起的一系列语句);全局变量的作用域在定义位置到文件结尾都可用;
(2)静态持续变量:

....main.cpp......文件
       int  global=100;   //静态持续变量,可外部链接,在整个程序的执行期间都存在
       static int  one_file=50;     //静态持续变量,内部链接,只能在本文件中使用,对别文件不可见
int main()
{
   ....
}
void fun_1(int n)
{
     static int count=0;//静态持续,无链接,即使fun_1函数没有被执行,count也留在内存中,其值在两次函数调用期间                                    			       //保持不变;
     int    x=9//x在fun_1结束后消失
........
}

静态变量默认初始化为0;

(3)单定义规则:变量只能定义一次;
定义声明(定义definition)给变量分配内存;引用声明(声明declaration)使用关键字extern,不进行初始化,不给变量分配存储空间,因为他只是引用变量;
如果在多个文件中使用外部变量,只需要在一个文件中包含该变量的定义(单定义规则),单在使用该变量的其他文件中,都必须使用关键字extern声明它;

    //file_0.cpp
int cats=0;
int dogs=10;
....
    //file_1.cpp
extern int cats;
extern int dogs;
.....
//file_2.cpp
extern int cats;
extern int dogs;

作用域解析运算符"::"放在变量前面,表示使用变量的全局版本;
(4)如果文件定义了一个静态外部变量,其名称与另一个文件中声明的常规外部变量相同,则在该文件中,静态变量将隐藏常规外部变量;

//file1.cpp
int global=20;   //external declaration
.....
//file2.cpp
static int global=5;   //known to file2 only;
void fun()
{    
   cout<<global;     //使用文件2中的global,文件1中的被隐藏
   .......

(5)使用new运算符初始化:

int *pi=new in (6);    //*pi=6;

struct where{double x;double y; double z};
where* one=new where{3.2,5.3,6.5};

(6)定位new运算符,可以指定要使用的位置。

struct caff
{
    char dross[2];
   int flag;
};
char buffer[50];
caff* p1=new (buffer) caff;   //place structure in buffer
caff* p2=new caff;  //place structure in heap;

(7)在函数中声明的局部变量将隐藏在同一个文件中声明的全局变量(在名称相同时)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值