C++ 刷题笔记

友元函数是一种在类外定义,在类内特殊声明(加关键字friend),并且可以在类外访问类的所有成员的非成员函数。友元函数相对于普通函数,增加了访问类成员的权利。A、友元函数可以像普通函数一样直接调用,不需要通过对象或指针;BC、友元函数不是成员函数,所以不能被继承,也同样没有this指针;D、由于友元函数和普通函数的区别仅仅是具有访问类成员的权利,和继承性机制没有关系。友元函数破坏的是封装性。

求一个类的sizeof()

1 先找有没有virtual 有的话就要建立虚函数表,+4
2 static的成员变量属于类域,不算入对象中      +0
3 神马成员都没有的类,或者只有成员函数        +1
4 对齐法则,对大家都没有问题

const int a = 10;  //编译可通过,和int const a = 10; 表达的效果是一样的
a = 20;          //编译不通过

const int a;         //编译不通过,必须初始化

//指针常量,指向不能修改,指向的内存中的值可以修改,相当于数组名;
int b = 100;
int *const p;        //编译报错,必须初始化
int *const p = &b;     //编译通过
int *const p = &a;  //编译不通过,因为a是常量

//常量指针,指针指向可以修改,但指向的值不能修改,此时该指针也叫只读指针
int const *p;     //编译能通过,只是p为野指针
int const *p = &a;  //编译可通过
int const *p = &b;  //编译可通过
*p = 200;            //不管p指向a还是b,编译都不会通过

//常量指针常量
const int *const pp;     //编译不通过,必须初始化
const int *const pp = &a;     //编译通过
const int *const pp = &b;     //编译通过,此时b可以改变值,而且pp指向的值同步改变,但不能通过pp修改b的值

普通成员函数后面加上 const 修饰,就是常函数。
常函数中的 this 指针是常指针,不能在常函数中对成员变量进行修改,只能读取;
如果想要在常函数中对成员变量进行修改,可以在成员变量前加上 mutable 关键字进行修饰;

常函数可以被普通对象或者常对象调用,但是常对象只能调用常函数,常对象只能读成员。

静态联编 :指在编译阶段就将函数实现和函数调用关联起来,也叫早绑定。
动态联编:在程序执行的时候才将函数实现和函数调用关联。因此也叫晚绑定,一般情况下都是静态联编,涉及到多态和虚拟函数就必须使用动态联编了。

int *p[4]; //表示指针数组,有四个元素,每个元素都是整型指针。

int (*p)[4]; //表示行指针,所指对象一行有四个元素。
int *p(void); //表示函数,此函数无参,返回整型指针。
int(*P)(void) ;//表示函数指针,可以指向无参,且返回值为整型指针的函数。

C/C++ 中二维数组可以省略行数,但不能省略列数,因为二维数组存储的时候是先行后列。如果不指定列数,系统就无法得知一行需要存放几个数值,只要知道了列数,排头放就可以知道一共能放多少行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值