24_const,引用,缺省参数

作业

#include <limits.h> //数据类型最大有效位

float转double会丢失精度

cout.hex要单独使用,得到的是枚举值

语言改进宏成const

1. 宏的类型由表达式决定的,宏本身没有类型

2. 好用的宏应该是类型明确,又能被调试,不能被修改,C++出现了const

3. const常量不能直接获得地址,调试的时候可以从全局常量附近找地址,但修改了也没用。发布的时候没有这个地址。

4. 解决指针误操作问题,列如一个”=”修改 和 “==”判断,使用const修饰指针经常修饰函数的参数。但是还是可以强行取地址修改(破坏了语法)

5. *右边加const表示指向的地址也不能修改,*左边加const表示值不能修改

6. const解决常量字符串造成语法崩溃

char *p = “hello”; //加上const就编译不通过,解决了崩溃的问题

*p = ‘a’;

Const

1.限制问题 const TYPE*指向的内容不能修改

TYPE * const 指向的地址不能修改

Const TYPE * const指针指向的地址不能修改,指向的内容也不能修改

Int num;

//int const *p = &num;

const int *p = &num;

//*p = 1; //error

num = *p //ok

int * const p2 = &num;

*p2 = 1; //ok

//p2 = nullptr; //error

const int * const p3 = &num;

//p3 = nullptr; //error

//*p3 = 3; //error

2.转换问题 限制高 不能 往限制低的转换

const char *p4 = nullptr;

//char *p5 = p4; //error

char * p5 = nullptr;

p4 = p6;

3.Constexpr int n = 1; //这个变量只能给常量

4.用c++不要使用c的强转,不然会破坏c++的代码检测

引用

1.TYPE& 引用变量

2.本质与指针没什么区别

3.比指针语法更简洁

Int& ==> int *

Int *& ==> int **

4.引用的对象不可以被变化,引用只能初始化一次,不能直接初始化为常量,加上const可以

Const int& p3 = 1; // int n1 = 1; p3 = &n1;

5.扩展作用域

6.C++很多时候只能用引用,不能用指针

函数默认参数

  1. 默认参数,缺省参数
  2. 缺省参数只能在右边
  3. 参数可以都为默认参
  4. 声明实现不能同时写默认参数,缺省参数在声明中声明,不要在实现中声明

作业

1. 编程程序,实现strlen, 使用const保证参数操作的安全性
2. 编程程序,实现strcpy, 使用const保证参数操作的安全性
3. 编程程序,实现strcat, 使用const保证参数操作的安全性

  
#include 

using namespace std;

int myStrlen(const char *pChar)
{
    unsigned int nLenth = 0;

    while(*pChar != '\0')
    {
        nLenth++;
        
    }

    return nLenth;
}

char* myStrcpy(char *pDest, const char *pSrc)
{
    char *pDestStart = pDest;
    while(*pDest != '\0' || *pSrc != '\0')
    {
        *pDest = *pSrc;
        pDest++;
        pSrc++;
    }
    
    return pDestStart;
}

char* myStrcat(char *pDest, const char *pSrc)
{
    char *pDestStart = pDest;
    
    while(*pDest != '0')
    {
        pDest++;
    }
    
    while(*pSrc != '\0')
    {
        
        *pDest = *pSrc;
        pSrc++;
        pDest++;
    }
    
    pDest++;
    *pDest = '\0';
    
    return pDestStart;
}

int main()
{
    return 0;
}

4. 编程程序,实现函数swap交换两数,使用const保证参数的值不可修改

  
void swap(const auto num1, const auto num2)
{
	auto tmpNum = num1;
	num1 = num2;
	num2  = tmpNum;
}

5. 编写程序,使用引用来操作一个其它的整型局部变量
6. 编写程序,使用引用来操作一个其它的指针局部变量
7. 编写程序,实现函数swap,使用引用完成两数交换

  

void referInterger(int& nValue)
{
	nValue = 3;
}

void referPoniter(void& *pValue)
{
	*pValue = 3;
}

void referSwap(auto& num1, auto&num2)
{
	auto& tmpNum = num1;
	num1 = num2;
	num2 = tmpNum;
}

8. 编写一个函数实现求圆的面积,其中半径默认为10
9. 编写一个函数实现求长方形的面积,其中长和宽默认为10,5
10.编写一个函数实现求长方体的面积,其中长和宽默认为10,5

  
double getCirceArea(double dblRadii = 10.0)
{
	return 3.14 * dblRadii;
}

double getRectangleArea(double dblLength = 10, double dblWidth = 5)
{
	return dblLength * dblWidth;
}

double getRectangleArea(double dblLength = 10, double dblWidth = 5)
{
	return dblLength * dblWidth;
}

0 条评论
发表一条评论