面向对象程序设计2——c++/c四个基本准则

1. 最高准则:无二义性
对这个准则的理解:任何语句在系统编译时只能有一个意思,而不能“既可以这样编译得到一个结果,又可以那样编译得到另一个结果。”
准则的具体体现:
(1) 运算符的优先级与结合性。
优先级是为了消除诸如3+4*5 的表达式,是应该被当作 (3+4)*5 还是3+(4*5)的二义性而设定的规则。
示例代码:

#include <iostream>
using namespace std;
int main(){
	int x, y;
x= 3 + 4 * 5;
y = (3 + 4) * 5;
cout<< x << ends<<y<<endl;
}
//输出为23 35;可见“*”在“+”前面计算,优先级使程序不会先算“+”

结合性是指相同优先级的运算符在同一个表达式中,且没有括号的时候,运算符和操作数的结合方式,如a=b=c,是先a=b,还是先b=c?如果
示例代码:

#include <iostream>
using namespace std;
int main(){
	int x, y,z;
	y = 0;
	z = 1;
	x = y = z;
	cout << x << endl;
	y = 0;
	z = 1;
	x = y;
	y= z;
	cout << x << endl;
	y = 0;
	z = 1;
	y = z;
	x = y;
	cout << x << endl;
}
//输出:1 0 1;因为根据结合性,“=”是右结合符,从右到左,先是z值赋给y;

(2) 标识符不能以数字开头
因以0(0x)开头的数字是常数。假设可以以数字开头,那么,0123,这一个常量还是变量?。 0x这是一个常量还是变量?为了区分常量和变量。就不允许以数字开头。
(3) 贪心规则
编译器将程序分解成符号的方法是,从左到右一个一个字符的读入,如果该字符可能组成一个符号,那么再读入下一个字符,然后在判断已经读入的两个字符是否有可能是一个符号或者一个符号的组成部分,如果可能则继续读入下一个字符,然后重复整个过程,直到读入的字符组成的字符串已不再可能组成有意义的符号。
示例代码:

#include <iostream>
using namespace std;
int main(){
	int x, y,z;
	y = 0;
	z = 1;
	x = y--z;//因为贪心规则,编译时会解释为(a--)b;所以就发生了编译错误;
	cout << x << endl;
}

(4)else总是与它前面最近的一个尚未配对的if相匹配
示例代码:

#include <iostream>
using namespace std;
int main(){
	int x, y,z;
	y = 0;
	z = 1;
	x = 3;
	if (x > y)
		cout << "执行第一个if了" << endl;
	if (x < 0)
		cout << "执行第二个if了" << endl;
	else 
		cout << "执行else了"<< endl;

}
//输出:执行第一个if了   执行else了。可见else是与后一个if匹配

2. 第二高准则,高效性
(1) 数组下标0索引。
下标从0开始:第i个元素地址:首地址 + i*4
下标从1开始:第i个元素地址:首地址 +(i-1)*4
所以如果数组元素下标从1开始,每次计算地址时,需要多做一次减法操作。因此,为了提高效率,C语言数组元素下标从0开始。
(2) 逻辑短路
逻辑短路规则为对于表达式a&&b 当a为假时,b不会计算; ||前面不是0时,||号后面的不计算。
示例代码:

#include <iostream>
using namespace std;
int main(){
	int a, b, c,d;
	a = 0;
	b = 0;
	c = 0;
	d = 1;
	if (a && (b++));
		cout << b << endl;
	if (a || c++);
		cout << c << endl;
	if (d || a++);
		cout << a << endl;

}
//输出0 1 0;可见&&前为假时后面b++不再执行;||前为真时后面a++不再执行


3.合乎日常习惯
编程语言合乎大部分日常习惯,这样子让语言读起来更加易懂,在编程时也能减少错误。如:先乘除后加减,数组a[i][j]前面是行后面是列;这些都是我们日常的逻辑习惯。
4.补充原则:相似相同原则
C++中,如果有两个不同的对象A与B,A有行为a,B有行为b,如果a与b两种行为在逻辑.上具有相似性,则C++ 会为对象A额外增加一个行为b,也会将对象B额外增加一个行为a。
示例代码:

#include <iostream>
using namespace std;
int main(){
	int a=1;
	int b(2);
	cout << a<<ends << b << endl;
}
//输出1 2;在此处中因为相似相同原则所以c++给“()”增加了它本没有的“=”的功能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值