C++初始化表总结

class A
{
    A(int x);//A的构造函数
};

class B
{
    B(int x, int y);//B的构造函数
};

B::B(int x, int y)    
  :A(x)        //在初始化表里调用A的构造函数
{
}

上述为:
(1)如果类存在继承关系,派生类必须在其初始化表里调用基类的构造函数。
(2)类的const常量只能在初始化表里被初始化,因为它不能在函数体内用赋值的方式来初始化。
     class A
     {
        A(int size);
        const int SIZE;
     };
     A::A(int size)
       :SIZE(size)
     {
     }

 还一种是在类成员中含有引用变量,也要用初始化表
(3)类的数据成员的初始化可以采用初始化表或函数体内赋值两种方法,这两种方法的效率不完全相同。
    非内部函数数据类型的成员应当采用第一种方式初始化,以获取更高的效率。
    class A
    {
        A(void);//无参数构造函数
        A(const A &other);//拷贝构造函数
        A & operator = (const A &otherf)//赋值函数
    };
    class B
    {
    public:
        B(const A &a);//B的构造函数
    private:
        A m_a;//成员对象
    };
    B::B(const A &a)
      :m_a(a)
    {
    }
    对于内部数据类型的数据成员而言,两种初始化方式的效率几乎没有区别,但后者的版式更清楚。
    class F
    {
    public:
        F(int x, int y);//构造函数
    private:
        int m_x;
        int m_y;
    };
    F::F(int x, int y)
    {
        m_x = 0;
        m_y = 0;
    }

### C++中链初始化的方法 在C++中,链初始化可以通过多种方式实现,具体取决于链的结构(单链或双向链)以及是否需要动态分配内存。以下是几种常见的链初始化方法。 #### 方法一:使用指针动态分配内存 以下是一个双向链初始化的示例代码,展示了如何通过`new`操作符为链头节点分配内存并设置初始值[^1]。 ```cpp // 初始化双向链 bool InitList(LinkList*& L) { L = new LinkList; // 动态分配内存 if (!L) return false; // 检查内存分配是否成功 L->next = NULL; // 设置下一节点为空 L->prev = NULL; // 设置前一节点为空 L->data = -1; // 初始化数据域 return true; } ``` 此方法适用于需要动态创建链头节点的情况,并且确保了链的初始状态是空的。 #### 方法二:利用构造函数初始化C++中,可以利用类的构造函数来初始化。这种方式更加面向对象,能够将初始化逻辑封装到类内部[^2]。 ```cpp class Node { public: int data; Node* next; Node* prev; // 构造函数初始化 Node(int value = 0, Node* next_ptr = nullptr, Node* prev_ptr = nullptr) : data(value), next(next_ptr), prev(prev_ptr) {} }; class LinkedList { private: Node* head; public: // 初始化 LinkedList() : head(nullptr) {} // 插入节点 void insert(int value) { Node* newNode = new Node(value); if (!head) { head = newNode; } else { Node* temp = head; while (temp->next) { temp = temp->next; } temp->next = newNode; newNode->prev = temp; } } ~LinkedList() { Node* current = head; while (current) { Node* next = current->next; delete current; current = next; } } }; ``` 上述代码中,`Node`类的构造函数用于初始化每个节点的数据和指针,而`LinkedList`类的构造函数则负责初始化头指针为`nullptr`。此外,还提供了插入节点的功能以及析构函数以释放动态分配的内存。 #### 方法三:结合C++11特性进行初始化 C++11引入了非静态成员变量直接初始化的特性,这使得链节点的初始化更加简洁。 ```cpp class Node { public: int data = 0; Node* next = nullptr; Node* prev = nullptr; // 可选的构造函数 Node(int value) : data(value) {} }; ``` 在此示例中,`data`、`next`和`prev`成员变量在声明时被直接初始化为默认值,从而避免了显式构造函数的必要性。 #### 方法四:根据语言特性选择合适的初始化方式 对于C++和C语言中的链初始化方式,推荐根据具体需求选择合适的方式。如果使用C++,建议采用引用传递的方式来简化代码逻辑;而在C语言中,则必须使用指针传递[^3]。 ```cpp void Init(LinkList& L) { L.next = nullptr; L.prev = nullptr; L.data = -1; } ``` 以上代码展示了C++中通过引用传递初始化节点的方式,相比C语言的指针传递更加直观。 --- ### 总结 C++中链初始化可以通过动态分配内存、构造函数、C++11特性等方式实现。具体选择哪种方式取决于链的结构、项目需求以及个人偏好。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值