C++笔记

模板 (泛型编程)

函数模板

语法:

template <typename 形参名,typename 形参名,......> 返回类型 函数名(参数列表)
{
    函数体
}
  • 定义函数模板时typename关键字可以替换成class,效果一样。 template<class T>
  • 自动类型推导,必须推导出一致的数据类型T才可以使用。
  • 模板必须要确定出T的数据类型,才能使用。
  • 函数模板调用时,如果利用自动类型推导,不可以发生隐式类型转换。
  • 函数模板调用时,如果显示指定类型,可以发生隐式类型转换。
  • 如果函数模板和普通函数都可以调用,优先调用普通函数。
  • 可以通过空模板参数列表的形式强制调用函数模板。
  • 函数模板可以发生函数重载。
  • 如果函数模板可以产生更好的匹配,优先调用函数模板。
  • 函数模板针对特定类型可以具体化。例如person类型:
//通用模板
template<class T>
bool myCompare(T a, T b)
{
...
}
//具体化
template<> bool myCompare(Person p1, Person p2)
  • 利用具体化的模板可以解决自定义类型的通用化。

类模板

语法:

template<typename  形参名,class 形参名,…>   class 类名
{ ... };
  • 定义类模板时typename关键字可以替换成class,效果一样。 template<class T>
  • 类模板没有自动类型推导的使用方式。只能用显示指定类型。
  • 类模板在模板的参数列表中可以有默认参数类型。
template<class NameType, class AgeType = int>
class Person
{
...
};
  • 类模板中的成员函数在调用时才创建。

STL标准模板库

智能指针

  • 自动申请和释放内存
  • unique_ptr

引用

引用做参数

运算符重载

//=号的运算符重载
Person operator=(Person &p)
{
...
}

虚函数和纯虚函数

//虚函数
virtual void myShow()
{
...
}
//纯虚函数
virtual void myShow() = 0;

静态成员

静态成员变量

  • 所有对象共享同一份数据
  • 在编译阶段分配内存
  • 类内声明,类外初始化
  • 可以通过对象进行访问,也可以通过类名直接访问
  • 静态成员变量也是有访问权限的,私有的静态成员变量在类外是无法访问的。

静态成员函数

  • 所有对象共享一个函数
  • 静态成员函数只能访问静态成员变量
  • 可以通过对象进行调用,也可以通过类名直接进行调用。

struct和class的区别

struct和class只有一个区别,就是默认的权限不同。也可以用struct来写类。

  • class的默认权限是私有
  • struct的默认权限是公共
C++学习笔记涵盖基础部分、核心编程和提高编程等内容。 ### 基础部分 包括初识C++、数据类型、运算符、程序流程结构、数组、函数、指针、结构体等内容[^1]。 ### C++核心编程 包含引用、函数提高、类和对象、文件操作等内容。在结构体方面,C++的结构体成员除了可以是变量,也可以是函数。例如: ```cpp #include <iostream> using namespace std; struct Student { char name[32]; int age; float score; void fun() { cout << "姓名:" << name << endl; cout << "年龄:" << age << endl; cout << "成绩:" << score << endl; } void fun1() { cout << "上课了" << endl; } }; int main() { Student stu; cin >> stu.name; cin >> stu.age; cin >> stu.score; stu.fun(); stu.fun1(); return 0; } ``` 此代码定义了一个`Student`结构体,其中包含变量和函数成员,并在`main`函数中使用该结构体创建对象并调用其成员函数[^2]。 ### C++关键字 包含asm、do、if、return、typedef等众多关键字,这些关键字在C++编程中有特定的用途和语法规则[^3]。 ### C++常量 用于记录程序中不可更改的数据,使用语法有两种: 1. `#define`宏常量:`#define 常量名 常量值` 2. `const`数据类型 常量名 = 常量值; 示例代码如下: ```cpp #include <iostream> using namespace std; // 1. #define 宏常量 #define Day 7 int main() { // int Day = 14; // 如果修改常量的值,会报错,宏常量不可修改 cout << "一周有" << Day << "天" << endl; // 2. const修饰的常量 const int month = 12; // int month = 17; // 常量定义后不可修改值,程序报错 cout << "一年有" << month << "个月" << endl; system("pause"); return 0; } ``` 上述代码通过两种方式定义了常量,并展示了常量不可修改的特性[^4]。 ### C++提高编程 包含模板、STL等内容[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jimbo_Zhang

有钱的捧个钱场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值