C++ 类构造函数 & 析构函数

C++ 类构造函数 & 析构函数
构造函数初始化列表仿
构造函数初始化列表真

首先,

你可以将构造函数设为private,但是你就因为外部不能访问private成员而不能使用这个类。
在C++中,如果你没有为类定义任何构造函数,编译器会为你自动生成一个默认构造函数。但是,如果你已经定义了至少一个构造函数(非默认构造函数),那么编译器就不会再自动生成默认构造函数。

其次,

注意构造函数定义了有参数的,然后你创建了一个什么都没给的Books bo;,会报错,因为你没定义默认构造函数;当你定义了一个全参数的构造函数,又定义了一个默认构造函数,会报错,因为系统认为这两个都符合。

#include <iostream>
using namespace std;

class Books {
	int id;
	string name;


public:
	Books() {}
	Books(int i=0, string n="nope"): id(i), name(n) {
		cout<<"Reading is important thing.\n";
	}
	~Books() {
		cout<<"Destroy "<<name<<".\n";
	}

	void setId(int i) {
		id = i;
	}
	int getId() {
		return id;
	}
	void showId() {
		cout<<"id is "<<id<<".\n";
	}


};

int main() {

	Books bo;
	bo.showId();

	return 0;
}

直接报错error: call of overloaded 'Books()' is ambiguous

然后,

对于初始化列表,要注意
必须使用的时候 const成员变量
成员变量的初始化顺序只与成员变量在类中声明的顺序有关,与初始化列表中列出的变量的顺序无关

#include<iostream>

using namespace std;
class text {
	int b, a;
public:
	text():a(10),b(a+10) {}
	void print();
} ;
void text::print() {
	cout<<a<<endl<<b;
}
int main() {
	text t;
	t.print();
	return 0;
}

输出结果b不是20,多半是10

最后,

析构函数会按照类的继承顺序从基类到派生类的顺序依次调用。
析构函数会按照创建对象的顺序从最后创建的对象到最先创建的对象的顺序依次调用。
析构函数会按照对象内部成员变量的声明顺序从最后声明的成员变量到最先声明的成员变量的顺序依次调用。

#include <iostream>
using namespace std;

class Books {
	int id;
	string name;
public:
	Books(int i, string n): id(i), name(n) {
		cout<<"Reading is important thing.\n";
	}
	~Books() {
		cout<<"Destroy "<<name<<".\n";
	}

	void setId(int i) {
		id = i;
	}
	int getId() {
		return id;
	}
	void showId() {
		cout<<"id is "<<id<<".\n";
	}

	void showName() {
		cout<<"This book's name is "<<name<<".\n";
	}

	void show() {
		showId();
		showName();
	}
};

int main() {

	Books bo(123, "HandsomeTom");
	bo.show();

	Books ao(455656, "HI");
	ao.show();

	return 0;
}

相关推荐

  1. C++ 构造函数 & 函数

    2024-03-21 16:22:03       40 阅读
  2. C++ 构造函数 & 函数

    2024-03-21 16:22:03       20 阅读
  3. C++入门【36-C++ 构造函数 & 函数

    2024-03-21 16:22:03       31 阅读
  4. C++ 函数构造函数

    2024-03-21 16:22:03       38 阅读
  5. C++入门7 |构造函数|函数

    2024-03-21 16:22:03       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-21 16:22:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-21 16:22:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-21 16:22:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-21 16:22:03       20 阅读

热门阅读

  1. FDU 2018 | 1. 求众数

    2024-03-21 16:22:03       20 阅读
  2. el-table原始列表转换成树形数据

    2024-03-21 16:22:03       20 阅读
  3. blender记一下法线烘焙

    2024-03-21 16:22:03       21 阅读
  4. 在springboot中利用Redis实现延迟队列

    2024-03-21 16:22:03       21 阅读
  5. 【linux】grep 命令

    2024-03-21 16:22:03       21 阅读
  6. 【AI】计算机视觉是什么

    2024-03-21 16:22:03       24 阅读