C++-基础

一、struct和class的区别

1、struct默认是public,class默认是private。

2、struct默认不会初始化成员。

二、template - 模板

1、function template -函数模板

函数参数类型、返回值类型不确定,可以利用template书写函数模板。

实际上,可以看作多个重载函数的集合。传入参数为数据类名。

示例:比较两值的大小

template<typename T> T maxValue(const T& a,const T& b){
    renturn a>b? a:b;
}

ps:class Vs typename,

在template的调用中,class和typename可以视作相同。

typename还可用于避免歧义,添加在嵌套从属名称前。

也可在template后换行

template<typename T> 
T maxValue(const T& a,const T& b){
    renturn a>b? a:b;
}

调用示例:

int a =3 , b = 4;
maxValue(a,b);
//为了提高代码可读性可以在调用时声明需要引用的数据类型
maxValue<int>(a,b);

2、class template -类模板

与函数模板类似,将数据类型或者需要用到的参数传入自定义的类型中。

示例:(自定义Vec类型),利用模板方便一次性定义多种Vec,将Vec的维数当作参数传入template模板中,实现代码的简化

template<int n> struct vec {
    double data[n] = {0};
    double& operator[](const int i)       { assert(i>=0 && i<n); return data[i]; }
    double  operator[](const int i) const { assert(i>=0 && i<n); return data[i]; }
    double norm2() const { return *this * *this; }
    double norm()  const { return std::sqrt(norm2()); }
};

其中n代表需要定义的Vec的维数

使用示例:(定义Vec2)与函数模板类似,在定义vec类型时,传入template需要的参数或者数据类型。

template<> struct vec<2> {
    double x = 0, y = 0;
    double& operator[](const int i)       { assert(i>=0 && i<2); return i ? y : x; }
    double  operator[](const int i) const { assert(i>=0 && i<2); return i ? y : x; }
    double norm2() const { return *this * *this; }
    double norm()  const { return std::sqrt(norm2()); }
    vec<2> normalized() { return (*this)/norm(); }
};

三、语法糖

一种简化代码的行为,使代码更加易读、易懂。

1、操作符重载:为自定义的数据类型重载加减乘除等操作符

示例:(定义Vec的[])

double& operator[](const int i)       { assert(i>=0 && i<n); return data[i]; }
double  operator[](const int i) const { assert(i>=0 && i<n); return data[i]; }

四、assert -断言检查

需要包含cassert头文件

在程序执行过程中进行断言检查,满足条件后程序得以继续运行,否则将会出现报错信息。通常用于调试。

示例:(定义Vec[])确保参数不超过数组边界

double& operator[](const int i)       { assert(i>=0 && i<n); return data[i]; }
double  operator[](const int i) const { assert(i>=0 && i<n); return data[i]; }

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值