Nowcode专项练习:C++(十二)

1,类的指针

  • A *p = new B;
    A指针指向一个实例化对象B,B类继承A类,先调用父类、即A的构造函数,再调用B的构造函数。

  • p->fun();
    执行B中的fun函数。


2,指针数组

[]的优先级比*的优先级要高。

  • int ( * a)[10];
    “()”的优先级比“[]”高,“*”号和a构成一个指针的定义,指针变量名为a,int 修饰的是数组的内容,即数组的每个元素。数组在这里并没有名字,是个匿名数组。那现在我们清楚a 是一个指针,它指向一个包含10 个int 类型数据的数组,即数组指针

  • int * a[10];
    a先与“[]”结合,构成一个数组的定义,数组名为a,int *修饰的是数组的内容,即数组的每个元素。那现在我们清楚,这是一个数组,其包含10 个指向int 类型数据的指针,即指针数组


3,友元函数的权限

友元函数是一种能够访问类中的私有成员的非成员函数,一个类的友元函数对类成员的访问能力等同于类的成员函数,即能访问类的所有成员


4,二维数组的定义

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


5,类中的静态变量

不管类有没有实例化,类中的静态变量一定要要类外进行初始化,而且类中的静态变量跟类的对象没有直接关联(静态变量是所有类对象都可以共用的,并不是一个类的对象声明一个静态变量)

静态数据成员是使用类名而不是对象名来调用,因为静态数据成员只与类有关而与具体对象无关。


6,case

case后面的常量表达式实际上只起语句标号作用,而不起条件判断作用,即“只是开始执行处的入口标号”。
因此,一旦与switch后面圆括号中表达式的值匹配,就从此标号处开始执行;
而且执行完一个case后面的语句后,若没遇到break语句,就自动进入下一个case继续执行,而不再判断是否与之匹配,直到遇到break语句才停止执行,退出switch语句。
因此,若想执行一个case分之后立即跳出switch语句,就必须在此分支的最后添加一个break语句。


7,对成员函数指针的调用

Q:
已知fun(int)是类Test的公有成员函数,p是指向成员函数fun()的指针,应该采用什么方法:

A:

  • p = &Test::fun

对成员函数指针的调用,指向公有非静态成员函数,调用时必须创建一个对象。


8,结构化程序设计

结构化程序设计所规定的三种基本控制结构是:

  • 顺序
  • 选择
  • 循环

9,私有成员的访问

  • 使用public公有继承时,基类中的私有成员在派生类中不可以直接访问。
  • 基类中的私有成员在派生类中不可以直接访问,只能通过其基类的方法进行访问或者通过友元函数进行访问。

10,#define与const

#define与const相比有如下的劣势:

  • const定义常量是有数据类型的,而#define宏定义常量却没有。
  • const常量有数据类型,而宏常量没有数据类型。编译器可以对const进行类型安全检查,而对于后者只是进行字符替换,没有类型安全检查,并且字符替换中可能产生意想不到的错误。
  • 有些集成化的调试工具可以对const进行调试,但是不能对宏常量进行调试。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值