C++ primer 学习1

1.数据成员mutable关键字

有时我们希望类的数据成员可以被改变甚至被const成员函数改变,则将成员变量声明为mutable来实现,尽管某个成员函数是const,但是仍然可以改变这个变量。

2.构造函数的初始化列表

[c]

Class hust{

Public:

Hust():name(“”),score(0){}

Private:

Std::string name;

Int scroe;

};

[/c]

构造函数不可以声明为const函数,因为运行一个普通的构造函数就是用来初始化成员变量的,并且不管一个成员是否为const类型,都可以用构造函数进行初始化。初始化列表只能在类内定义而不是只是声明指定。例如 hust(const string No):Xuehao(No),name(“”),score(0){}

使用构造函数初始化列表的必要性:在对具有const属性的成员变量初始化时只有在构造函数初始化列表中才有机会进行初始化,这是唯一的机会。另外初始化可以是任意的表达式,例如:score(20*5).

3.explicit关键字一致由构造函数隐式的转换

[c]

Class hust

{public:

Explicit hust(const std::string nm = “”):name(nm),…..{}

};

[/c]

同时explicit关键字只能在类内使用,在类外定义是错误的。

[c]

Hust huster;

Huster.same_student(“wgl”); //error

Huster.same_student(hust(“wgl”)); //correct

[/c]

Explicit关键字抵制了构造函数的隐式转换,避免了阿狸地一个测试完成后的丢弃的对象,然后再一次对这个对象引用的错误。

4.友元

有时候允许特定的非成员函数访问一个类的私有成员方法,同时仍然阻止一般的访问。Friend只能出现在类的内部。

[c]

Class hust{

Friend class swu;

********************

};

Int swu::getname(hust & huster,int age)

{

//访问了hust类的私有成员,此时所有hust的私有成员在swu的成员函数中都可以被访问

Return huster.age+age-18;

}

[/c]

限制某个函数使用

[c]

Class hust{

Friend int swu::getname(hust&huster,int age);

};

[/c]

此时只有swu类的getname成员函数可以访问hust的private成员变量。

《C++ primer 学习1》有2个想法

发表评论