田敏
返回博客列表
技术

c++笔记

田敏
2023-03-061 分钟阅读
CodingTipsC#

c++笔记

1.C++中,能作为函数重载判断依据的是?

参数类型,参数个数,const。 为什么返回值不能作为重载的依据?编译器在编译时,不会去判断函数的返回类型,也就是说,你的返回值虽然不同,函数只有调用后,编译器才会去验证类型,所以返回值不能做为重载依据。

2.调用拷贝构造函数的3中情况:

1、用一个对象去初始化同一个类的另一个新对象时

2、函数的形参对象,调用函数进行形参和实参结合时

3、函数的返回值是类的对象,函数执行返回调用时 将一个对象赋值给另一个对象,两个对象都存在,调用的是赋值构造函数,不涉及内存的分配。 当被赋值的对象不存在调用的是拷贝构造函数。

3.substr函数的用法:

substr(size_type _Off = 0,size_type _Count = npos) 一种构造string的方法 形式 : s.substr(pos, len) 返回值: string,包含s中从pos开始的len个字符的拷贝(pos的默认值是0,len的默认值是s.size() - pos,即不加参数会默认拷贝整个s) 异常 :若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾

4.常量指针和指针常量的区别:
int * const p //指针常量 不能改变所指向的地址
int a,b;
int * const p=&a //指针常量
//那么分为一下两种操作
*p=9;//操作成功
p=&b;//操作错误

const int *p = &a; //常量指针 不能改变所指向的值
int a,b;
 const int *p=&a //常量指针
//那么分为一下两种操作
*p=9;//操作错误
p=&b;//操作成功


const默认修饰左边的内容,如果左边没有东西则修饰其右边的内容

const int *a const左边没有东西,因此const修饰int,则指针指向的内容不可通过指针修改

int const *a const左边有东西,因此const修饰int

int* const a const修饰*,即指针不能改变指向

const int * const a 第一个const修饰int,第二个const修饰*,即指针指向内容不可修改,也不能改变指针指向

总结:*在const左边,不能改变指针指向,*在const右边,不能修改所指的值

5.抽象类不能初始化,不能当做返回值,不能当做参数,可以作为指针变量,因为此时还没有初始化
6.二维数组的行地址和各个元素地址的表示
int a[3][4];
a;//代表数组首行地址,一般用a[0][0]的地址表示
&a;//代表整个数组的地址,一般用a[0][0]地址表示
a[i];代表了第i行起始元素的地址(网上说是代表了第i行的地址,但我觉得不是,在讲数组与指针的关系时我会验证给大家看)
&a[i];代表了第i行的地址,一般用a[i][0]的地址表示
a[i]+j;//代表了第i行第j个元素地址,a[i]就是j==0的情况
a[i][j];//代表了第i行第j个元素
&a[i][j];//代表了第i行第j个元素的地址
版权协议:MIT返回列表