创建对象

class A{
  public:
      int x;
      A();
      A(int);
      
};

//1
A a1;  // 使用无参构造

//2  有参构造创建对象
A a2(10);  // 第一种方式

A a3 = A(20);  // 第二种方式
// 第二种方式,编译器可能有两种方式执行
// 与第一种相同,直接使用参数创建对象
// 或者先使用参数创建一个临时对象,然后将临时对象复制到变量a3中,然后丢弃临时对象


// 对已经创建的对象,调用构造函数再次赋值,则首先创建一个临时对象,然后覆盖已有对象
a3 = A(40); // 先使用40创建一个临时对象,然后将其内容复制给a3,随后销毁临时对象。

作用域为类的常量

class T{
    public:  
        const int x = 10;
        int arr[x];
};

因为类的声明只是描述了对象的形式,并没有创建对象。所以对象创建前并没有存储值的空间,直接使用const并初始化一个常量量,并没有创建该常量。

使用枚举

class A{
    public:  
        enum {length=10}; // 使用枚举创建符号常量,并没有创建数据类成员
        int arr[length];  // 当使用length时,编译器会用10来代替length
};

作用域内枚举

当两个枚举在同一作用域内且永远同名符号时,会发生冲突

enum A{height, width};
enum B{height, width}; // 两个枚举位于同一个作用域时会发生冲突

// C++ 11 ,作用域内枚举,添加class 或者struct关键字
enum class A{height, width};
enum struct B{height, width};

// 创建枚举量时需要枚举名限定
enum class a{h,w};
enum struct b{h,w};
a h = a::h;
b w = b::w;
cout<<int(h)<<endl;  // 作用域枚举不会隐式的转换为整性,常规枚举可以
cout<<int(w)<<endl;
posted @ 2022-06-20 16:10  店里最会撒谎白玉汤  阅读(25)  评论(0)    收藏  举报