0%

C++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,explicit构造函数是用来防止隐式转换的。

隐式转换:

如果C++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象。
如下面所示:

阅读全文 »

参考文章:C++虚函数表剖析
参考文章:C++虚函数表分析
参考文章:C++中基类的析构函数为什么要用virtual虚析构函数


C++ 中的多态是用虚函数实现的:子类覆盖(重写)父类的虚函数,然后声明一个指向子类对象的父类指针,如 Base* base = new Derived(); 当调用base->func(),调用的是子类的Derived::func()

1
2
3
4
5
6
7
8
9
10
11
class Base
{
public:
virtual void func();
};

class Derived : public Base
{
public:
void func();
};

这种机制使用了一种动态绑定的技术,技术核心是虚函数表(简称虚表)。


阅读全文 »

简介

Samba是在Linux系统上实现的SMB(Server Messages Block,信息服务块)协议的一款免费软件。它实现在局域网内共享文件和打印机,是一个客户机/服务器型协议。客户机通过SMB协议访问服务器上的共享文件系统。

阅读全文 »

简介

FTP(文件传输协议)全称是:Very Secure FTP Server。 Vsftpd是linux类操作系统上运行的ftp服务器软件。

FTP会话时采用了两种通道:
控制通道:与ftp服务器进行沟通的通道,链接ftp发送ftp指令都是通过控制通道来完成的。
数据通道:数据通道和ftp服务器进行文件传输或则列表的通道

阅读全文 »


一维数组与指针

数组名代表的数组的首地址,通过这个首地址我们可以对这块内存区域进行访问,因为数组分配空间是按照顺序依次分配的。

1
2
3
4
5
6
7
8
int a[] = {1, 2, 3, 4, 5};

std::cout << "show array a : ";
for (int i = 0; i < sizeof(a) / sizeof(a[0]); ++i)
{
std::cout << a[i] << "\t";
}
std::cout << std::endl;

输出:

1
show array a : 1    2   3   4   5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int a[] = {1, 2, 3, 4, 5};

PRINT_INFO("a = " << a); //->a[0]

for (int i = 0; i < sizeof(a) / sizeof(a[0]); ++i)
{
PRINT_INFO("----------------------------");
PRINT_INFO("&a[" << i << "] = " << &a[i]); //->a[i]
PRINT_INFO("a[" << i << "] = " << a[i]); //a[i]
PRINT_INFO("a + " << i << " = " << a + i); //->a[i]
PRINT_INFO("*(a+" << i << ") = " << *(a + i));//a[i]
PRINT_INFO("----------------------------");
}

PRINT_INFO("&a = " << &a); //->int[]
PRINT_INFO("&a + 1 = " << &a + 1); //->int[] + 1

PRINT_INFO("(&a + 1) - &a = " << (char* )(&a + 1) - (char* )&a); //相差字节
阅读全文 »

环境准备

安装 Git (部署GitHub博客)

1
2
3
$ sudo apt-get update
$ sudo apt-get install build-essential libssl-dev
$ sudo apt-get install git-core
阅读全文 »