C++关键字系列
2016-06-20 09:39
363 查看
本篇博客会记录重要的C++关键字
- explicit
explicit构造函数是用来防止隐式转换的。如下:class Test1 { public: Test1(int n) { num=n; }//普通构造函数 private: int num; }; class Test2 { public: explicit Test2(int n) { num=n; }//explicit(显式)构造函数 private: int num; }; int main() { Test1 t1=12;//隐式调用其构造函数,成功 Test2 t2=12;//编译错误,不能隐式调用其构造函数 Test2 t2(12);//显式调用成功 return 0; }
- 拷贝构造函数的知识
拷贝构造函数的识别:以下函数哪个是拷贝构造函数,为什么?
X::X(const X&);
X::X(X);
X::X(X&, int a=1);
X::X(X&, int a=1, int b=2);
解答:对于一个类X, 如果一个构造函数的第一个参数是下列之一:
a) X&
b) const X&
c) volatile X&
d) const volatile X&
且没有其他参数或其他参数都有默认值,那么这个函数是拷贝构造函数.
X::X(const X&); //是拷贝构造函数
X::X(X&, int=1); //是拷贝构造函数
X::X(X&, int a=1, int b=2); //当然也是拷贝构造函数
以下函数哪个是拷贝构造函数,为什么?
[c-sharp] view plain copy
X::X(const X&);
X::X(X);
X::X(X&, int a=1);
X::X(X&, int a=1, int b=2);
解答:对于一个类X, 如果一个构造函数的第一个参数是下列之一:
a) X&
b) const X&
c) volatile X&
d) const volatile X&
且没有其他参数或其他参数都有默认值,那么这个函数是拷贝构造函数.
[c-sharp] view plain copy
X::X(const X&); //是拷贝构造函数
X::X(X&, int=1); //是拷贝构造函数
X::X(X&, int a=1, int b=2); //当然也是拷贝构造函数
一个类中可以存在多于一个的拷贝构造函数吗?
解答:类中可以存在超过一个拷贝构造函数。
class X {
public:
X(const X&); // const 的拷贝构造
X(X&); // 非const的拷贝构造
};
注意,如果一个类中只存在一个参数为 X& 的拷贝构造函数,那么就不能使用const X或volatile X的对象实行拷贝初始化.
class X {
public:
X();
X(X&);
};
const X cx;
X x = cx; // error
- mutable关键字
当声明的函数为const函数时,要求内部使用的成员变量不能进行修改,如果需要进行修改操作,那么可以将这个变量声明为mutable(可变)类型。mutable double value; Ratioanl(double value) { this->value = value; } const Ratioanl operator*(const Ratioanl & lhs) { return Ratioanl(lhs.value*this->value); } void getValue() const { value = value; cout<<"this rational value is "<<value<<endl; }
相关文章推荐
- 图说C++对象模型:对象内存布局详解
- c++中深拷贝与浅拷贝
- C++之cout
- C++之IO流
- C++面向对象小结--继承
- C++面向对象小结--静态成员函数
- C语言中有关外部函数调用的问题
- C语言之memcpy函数
- leetcode #125 in cpp
- *leetcode #124 in cpp
- 日常小结-C++返回了类型的编程限制
- 日常小结-C++友元回忆
- *leetcode #123 in cpp
- 读书笔记-C++PrimerPlus-CPP流的总结
- C++中基本的语法规则
- error C2512: “HelloWorld”: 没有合适的默认构造函数可用
- C语言入门学习
- MD5算法的C++实现
- TEA加密算法的C/C++实现
- C++批判(1)