c++语法day3.

day 3.
mutable
需要注意的是:mutable不能修饰const 和 static 类型的变量。
我们知道,被const关键字修饰的函数的一个重要作用就是为了能够保护类中的成员变量。即:该函数可以使用类中的所有成员变量,但是不能修改他们的值。然而,在某些特殊情况下,我们还是需要在const函数中修改类的某些成员变量,因为要修改的成员变量与类本身并无多少关系,即使修改了也不会对类造成多少影响。当然,你可以说,你可以去掉该函数的const关键字呀!但问题是,我只想修改某个成员变量,其余成员变量仍然希望被const保护。
只需要在变量前加上mutable就能让变量在const 函数里进行修改;

class test
{
public:
mutable int a;
void add()const
{
++a;
}
} ;
对于可变成员(有mutable)修饰的变量,任何函数都能修改包括const

类内初始值必须以= 或者{} 进行初始化

需要注意的是const对象由于不能修改对象的状态,const对象只能调用const成员函数,如const Person person(20); 只能调用参数列表后加const的成员函数,而普通对象可以调用任何的成员函数。此外const对象在声明时要进行初始化。这与const修饰的变量是一致的,如const int x = 100;
也就是说常量对象只能调用常量函数,非常量对象能调用所有函数,常量函数只能调用常量函数,非常量函数能调用所有函数;

class screen
{
public:
screen &display(){}
const screen &display(){}
private:
void do_display(){};
} ;
screen myscreen(5,3);
const screen blank(5,3);
myscreen.set('#').dispaly(cout);//调用非常量
blank.dispaly(cout);//调用常量

友元再探;
一个类的某些函数想访问另一个类的私有成员;可以把类定义成友元
如windows想访问screen
class screen
{
friend class windows;
};
也可以只为windows的clear函数开友元权限
class screen
{
friend windows::clear();
};
友元函数声明只是获取访问权限,不是真正意义上的函数声明,所以要调用还得先声明那个函数

作用域和可见域

int main()
{
int num=0;

{
int num=1;
cout<<num<<endl;//1
}
cout<<num<<endl;//0
num的作用域是从定义开始到结束,可见域是不包括内部屏蔽的1的代码块;
跨文件使用变量,需要在另一个文件用extern声明
cpp1. int a=2,static b=10;
cpp2 如extern int a; 有无extern都可以 ;在cpp2不能使用cpp1的静态变量,加上extern都不行,静态变量只能用在一个文件内,外部无法使用;

return 0;
}

template<class T>//这里可以同时传入int,double避免多次写函数
T add(T a,T b)
{
return a+b;
}
//函数模板意义,通用、泛型
调用才编译,不调用部编译,就是说有错误会调用才知道
原始函数优先于模板函数,相当于重载函数的精确匹配
如果强行要调用模板 add<int>(1,2)这样就会调用模板的int,int

tamplate<class T,class F>//原则上用T表示类型,F表示函数
两个文件的全局变量重名可以使用命名空间
如main.h .main.cpp
在main.h文件下
namespace data
{
int num=20;
}
在cpp文件下
int num=10;
int main()
{
cout<<num<<endl;//10
cout<<data::num<<endl;//20::相当于域,引用全局变量

return 0;
}

上一篇:浏览器提供的对象


下一篇:搜索帮助——选择屏幕SCREEN