当类存在一个参数的构造函数的时候也能够将这个构造函数称之为转换构造函数,容许将参数类型的值转换成类类型,可是只容许一步类型转换,若是想要禁止这种转换操做,能够经过在构造函数前面添加 explicit 实现。注意,若是将构造函数声明成了explicit的方式,那么在实例化对象的初始化时只可以使用直接初始化,而不可以使用拷贝初始化。ios
1 #include <iostream> 2 #include <string> 3 4 5 class test 6 { 7 public: 8 test() = default; 9 test(std::string str) 10 { 11 strName = str; 12 } 13 14 std::string strName; 15 }; 16 17 int main() 18 { 19 test t; 20 std::string strName = "Name"; 21 t = strName; 22 23 // 这一行是没法经过编译的,由于只容许一步类型转换 24 // 这一步操做须要先将字符串转换为string类型,而后再转换为类类型 25 // t = "Name"; 26 27 28 return 0; 29 }
一个可变数据类型永远不会是const类型,若是在类型将成员声明成了mutable类型的变量,例如 mutable int n; ,那么即使是在const接口中也能够对其进行修改。函数
友元是不具备传递性质的,假如B是A的友元,C是B的友元,那么C不是A的友元,C不可以访问A类中的成员。spa
若是一个类全部成员都是public的,没有定义任何构造函数,没有类内初始值,没有基类,也没有virtual方法,则称这个类为聚合类,聚合类在实例化对象的时候能够采用初始化列表的方式进行初始化,值的顺序与类中定义成员的顺序是一致的,若是初始化列表中的值的数量少于成员的数量,则剩余的成员采用值初始化的方式进行初始化,可是不能够多于类内数据成员的数量。code