C++期末复习

1,静态类成员变量必须在类外进行初始化。
详见这篇文章

2,引用必须进行初始化,如:
在这里插入图片描述
在这里,b是会报错的。
在这里插入图片描述
这样才不会。但是在函数形参那边的引用就不用这样写啦。

3,数组作为函数引用形参
在这里插入图片描述

4,临时对象,关于临时对象的介绍看这篇文章,再来看下面这道题:
在这里插入图片描述
5,关于类的组合和类的继承相结合的构造顺序
看下面这段代码,写出其执行结果。

#include <iostream>
using namespace std;
class Base1 {	//基类Base1,构造函数有参数
public:
	Base1(int i) { cout << "Constructing Base1 " << i << endl; }
	~Base1() { cout << "Destructing Base1" << endl; }
};

class Base2 {	//基类Base2,构造函数有参数
public:
	Base2(int j) { cout << "Constructing Base2 " << j << endl; }
	~Base2() { cout << "Destructing Base2" << endl; }
};

class Base3 {	//基类Base3,构造函数无参数
public:
	Base3() { cout << "Constructing Base3 *" << endl; }
	~Base3() { cout << "Destructing Base3" << endl; }
};
class Derived : public Base2, public Base1, public Base3 {
	//派生新类Derived,注意基类名的顺序
public:	//派生类的公有成员
	Derived(int a, int b, int c, int d) : Base1(a), member2(d), member1(c), Base2(b) { }
	//注意基类名的个数与顺序,注意成员对象名的个数与顺序
private:	//派生类的私有成员对象
	Base1 member1;
	Base2 member2;
	Base3 member3;
};

int main() {
	Derived obj(1, 2, 3, 4);
	return 0;
}

这是一个关于组合类和多继承的构造,这种的构造为先构造继承的基类,基类的构造顺序为派生类继承的顺序,比如这道题为Base2、Base1和Base3,那么构造顺序就是先Base2后Base1,然后在Base3。接下来就是对组合进行构造,也是按照顺序来进行构造,依次是member1、member2和menber3,最后就是派生类自己了。这里我们要知道,构造函数的顺序跟派生类里面的书写顺序没有关系。那么这道题的答案就是:

Constructing Base2 2
Constructing Base1 1
Constructing Base3 *
Constructing Base1 3
Constructing Base2 4
Constructing Base3 *
Destructing Base3
Destructing Base2
Destructing Base1
Destructing Base3
Destructing Base1
Destructing Base2

6,const用法
const可以说是C++一个大boss了,也是一个难点,语法点比较多。
这里只讲一下常量指针和指针常量。

常量指针是指针指向的内容是常量,可以有一下两种定义方式。

const  int *  n;
int  const *  n;

(1)常量指针说的是不能通过这个指针改变变量的值,但是还是可以通过其他的引用来改变变量的值的。

int  a=5;
const  int*  p=&a;
a=6;

(2)常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变,常量指针可以指向其他的地址。

int a=5;
int b=6;
const  int*  p=&a;
p=&b;

指针常量是指指针本身是个常量,不能再指向其他的地址,写法如下:

int  *const  n;

需要注意的是,指针常量指向的地址不能改变,但是地址中保存的数值是可以改变的,可以通过其他指向该地址的指针来修改。

int  a=5;
int  *p=&a;
int*  const  n=&a;
*p=8;

总结:
区分常量指针和指针常量的关键在于星号的位置,以星号为分界线,如果const在星号的左边,则为常量指针,如果const在星号的右边则为指针常量。

int  const *  n;是常量指针,
int  *const  n;i是指针常量。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值