构造,析构与初始化列表
来源:互联网 发布:vb自动处理网页弹框 编辑:程序博客网 时间:2024/06/06 12:32
Default Constructor
- A default constructor is one that can be called with no arguments.不带参数的构造函数就是默认的构造函数。
- 当class没有constructor时,系统分配默认构造函数。
class B {public: B(int i){} B(){} //不带参数,为默认构造函数};
初始化列表
struct A { int i;//由于A为struct,所以i为public int *p; B b;public: A():p(0),b(0) {cout << "A::A()" << endl;}//这里的A():p(0),b(0)就是一个初始化列表 ~A() {if (p) delete p; cout << "A::~A()" << i << endl;} void set(int i) {this->i = i;} void f() {p = new int;} void g(A* q) {cout << "A::g(), q->i=" << q->i << endl;}};
struct和class的区别
- class中的成员变量,如果不作类型限制的话,默认是private
- struct默认是public
初始化列表在constructor之前调用
- 建议:类的所有成员变量都在initialzation中做初始化,而不要在构造函数中做赋值
- 父类的constructor放到参数列表中
当初始化列表中有对象时,调用constructor初始化该对象
class Person{private: string name;public: void print(); Person(string aname){name = aname;} Person():name("universe"){}//默认constructor,初始化name为"universe"};void Person::print() { cout << "Person's name is " << name << endl;}class A {private: int i; Person man;public: A():i(0),man("time"){cout << "A(), i = " << i << endl;}//初始化man时,调用man的constructor ~A(){cout << "~A(), i = " << i << endl;} void print();};
一个实例
#include <iostream>using namespace std;class B {public: B(int i) {} //B() {}//默认构造函数};struct A { int i; int *p; B b;public: A():p(0) {b = 0; cout << "A::A()" << endl;} ~A() {if (p) delete p; cout << "A::~A()" << i << endl;} void set(int i) {this->i = i;} void f() {p = new int;} void g(A* q) {cout << "A::g(), q->i=" << q->i << endl;}};int main(){ A* p = new A[10]; for (int i = 0; i < 10; i++) { p[i].set(i); } A b;}
编译,提示error
Error - constructor for ‘A’ must explicitly initialize the member ‘b’ which does not have a default constructor
有两种修改方法
- 给class B添加默认构造函数
- A的构造函数
A():p(0) {b = 0; cout << "A::A()" << endl;}
之前添加b的初始化
A():p(0),b(99) {b = 0; cout << "A::A()" << endl;}
0 0
- 构造,析构与初始化列表
- 构造函数与初始化列表
- C++中类的构造函数与析构函数(成员初始化列表)
- C++构造与析构(8) - 什么时候必须使用初始化列表
- C++之构造函数与初始化列表
- c++初始化列表与构造函数
- C++构造函数初始化列表与赋值
- 初始化列表 与 构造函数体
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++构造函数初始化列表与赋值
- C++初始化列表与构造函数异同
- C++构造函数初始化列表与赋值
- 初始化列表与构造函数中初始化 【C++ PRIMER 14.7】
- 测试基础
- Uva-1220 Party at Hali-Bula
- uva 11294 - Wedding(2 sat)
- java基础—7.多线程
- 制作easyui部门选择插件
- 构造,析构与初始化列表
- ios8绘图方法小记touchesBegan&touchesMoved
- android logging 机制及优化
- react-native试玩(11)-模态
- 零基础学python-12.1 while循环
- 主成分分析(PCA)——以2维图像为例
- android之线性布局,相对布局属性总结
- 练习题
- MPLS基本技术介绍