0%

前言

本文将介绍 C++ 如何使用 MySQL Connector/C++ 的 API 连接 MySQL 数据库,适用于 Windows 系统,MySQL Connector/C++ 的详细介绍可以看这里

版本说明

软件版本默认安装路径
MySQL Connector/C++1.1.13C:\Program Files\MySQL\MySQL Connector C++ 1.1.13
OpenSSLv1.1.1LC:\Program Files\OpenSSL-Win64
boost1_77_0C:\Program Files\boost_1_77_0
MySQL Server5.7.33
C++11
Visual Studio2019
Windows SystemWin 10
阅读全文 »

多态的原理

多态的实现原理

  • 当类中声明了虚函数时,编译器会在类中生成一个虚函数表
  • 虚函数表是一个存储类成员函数指针的数据结构
  • 虚函数表是由编译器自动生成和维护的
  • 虚函数(virtual)会被编译器放入虚函数表中
  • 当存在虚函数时,每个对象中都有一个指向虚函数表的指针(C++ 编译器给父类对象、子类对象提前设置了 VPTR 虚函数表指针,因此 C++ 编译器不需要区分子类对象或者父类对象,只需要在 base 指针中,找 VPTR 指针即可)
  • VPTR 虚函数表指针一般作为类对象的第一个成员
阅读全文 »

多继承

多继承概念

  • a) 一个类有多个直接基类(父类)的继承关系称为多继承

  • b) 类 C 可以根据访问控制同时继承类 A 和类 B 的成员,并添加自己的成员

阅读全文 »

继承概念

面向对象程序设计有 4 个主要特点:抽象、封装、继承和多态性。面向对象程序设计的两个重要特征一数据抽象与封装,两者已经能够设计出基于对象的程序,这是面向对象程序设计的基础。要较好地进行面向对象程序设计,还必须了解面向对象程序设计另外两个重要特征 —— 继承性和多态性。继承性是面向对象程序设计最重要的特征,可以说,如果没有掌握继承性,就等于没有掌握类和对象的精华,就是没有掌握面向对象程序设计的真谛。

类之间的关系

类之间一般有三种关系:has-Auses-Ais-A

  • has-A:包含关系,用以描述一个类由多个 “部件类” 构成。实现 has-A 关系可以用类成员表示,即一个类中的数据成员是另一种已经定义的类。
  • uses-A:一个类部分地使用另一个类。类之间成员函数的联系,可以通过定义友元或者对象参数传递来实现。
  • is-A:机制称为 “继承” 。关系具有传递性,不具有对称性。
阅读全文 »

友元函数

类的友元函数是定义在类的外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型在类的声明中出现过,但是友元函数并不是类的成员函数,而是普通函数(全局函数)。如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend

友元函数的规则

为什么要引入友元函数:

C++ 利用 friend 修饰符,可以让一些设定的函数能够对一些保护数据进行访问,避免把类的成员全部设置成 public,最大限度的保护数据成员的安全。同时友元函数可以实现类之间的数据共享,减少系统开销,提高效率。由于友元函数破环了封装机制,因此推荐尽量使用成员函数,除非不得已的情况下才使用友元函数。

什么时候使用友元函数:

  • 多个类要共享数据的时候
  • 运算符重载的某些场合需要使用友元函数
阅读全文 »

浅拷贝与深拷贝

  • C++ 提供的默认拷贝构造函数,可以完成对象的数据成员值简单的复制(浅拷贝)
  • 对象的数据资源是由指针指向的堆,C++ 提供的默认拷贝构造函数仅作指针值复制(浅拷贝)

浅拷贝问题剖析

阅读全文 »

学习目标

  • C++ 面向对象的基础模型
  • C++ 编译器管理类和对象的机制
  • C++ 编译器对类对象的生命周期管理,包括对象的创建、使用、销毁等

类和对象

基本概念

  • a) 类、对象、成员变量、成员函数
  • b) 面向对象三大概念:封装、继承、多态
阅读全文 »

C++ 对 C 语言的函数扩展

内联函数

什么是内联函数

在 C 语言中,使用宏定义函数这种借助编译器的优化技术来减少程序的执行时间,那么在 C++ 中有没有相同的技术或者更好的实现方法呢?答案是有的,那就是内联函数。内联函数作为编译器优化手段的一种技术,在降低程序运行时间上非常有用。C++ 的内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编译器需要重新更换一次所有的代码,否则将会继续使用旧的函数。如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字 inline,在调用函数之前需要对函数进行定义。所有在类中定义的函数都是内联函数,即使没有使用 inline 关键字声明。当内联函数收到编译器的指示时,即可发生内联:编译器将使用函数的定义体来替代函数调用语句,这种替代行为发生在编译阶段而非程序运行阶段。值得一提的是,内联函数仅仅是对编译器的内联建议,编译器是否觉得采取建议取决于函数是否符合内联的有利条件。如何函数体非常大,那么编译器将忽略函数的内联声明,而将内联函数作为普通函数处理。

为什么要使用内联函数

有时候我们会写一些功能专一的函数,这些函数的函数体不大,包含了很少的执行语句。例如在计算 1~1000 以内的素数时,我们经常会使用开方操作使运算范围缩小,这时我们会写如下一个函数:

1
2
3
4
int root(int n)
{
  return (int)sqrt((float)n);
}
阅读全文 »

const 关键字

const 简介

const 是 constant 的缩写,本意是不变的,不易改变的意思。在 C++ 中是用来修饰内置类型变量、自定义对象、成员函数、返回值、函数参数。C++ 的 const 关键字允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用 const,这样可以获得编译器的帮助。

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>

using namespace std;

int main() {
const int a = 7;
int *p = (int *) &a;
*p = 8;
cout << a << " "<< *p;
return 0;
}
阅读全文 »

C++ 简介

简介:

  • C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。
  • C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。
  • C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。
  • C++ 是由 Bjarne Stroustrup 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,最初命名为带类的 C,后来在 1983 年更名为 C++。

注意:使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查。

阅读全文 »