目录
//通过以下代码可以直接建立起完整的C++知识框架
//俺觉得计算机是个技能型学科,知识点什么的在敲代码的过程中学习就好了
1.动态初始化
//动态初始化
#include<iostream>
using namespace std;
int main(){ //跟C语言不同,想使用的时候才定义变量!!!
double radius=4.0,height=5.0;
cout<<"Enter the height"<<endl;
cin>>height;
double volume=3.1416*radius*radius*height; //动态初始化
cout<<"Volume is "<<volume<<endl;
return 0;
} //目的是为了配合类的构造函数
2.数据类型
//数据类型
#include<iostream>
using namespace std;
int main(){
cout<<"整型:short int、int、long int"<<endl;
cout<<"实型:float、double、long double"<<endl;
cout<<"bool型:bool"<<endl;
cout<<"字符型:char"<<endl;
cout<<"空类型:void"<<endl;
cout<<"枚举型:enum"<<endl;
cout<<"联合(共用体):union"<<endl;
cout<<"结构:struct"<<endl;
cout<<"类:class"<<endl;
cout<<"指针:*"<<endl;
cout<<"引用:&"<<endl;
cout<<"数组:[]"<<endl;
cout<<"可以加signed,unsigned修饰符"<<endl
return 0;
}
3.bool型
//bool类型
#include<iostream>
using namespace std;
int main(){
bool b=false;
cout<<b<<endl;
b=7; //等价于b=true
cout<<b<<endl;
b=3==4; //给b输入的是3是否等于4的结果,若正确b=1,错误则b=0
cout<<b<<endl; //输出的是0(false)或1(true),是数字不是true & false!!!
return 0;
}
4.无名参数
//无名参数
//作用:1.用于以后扩展 2.同于函数重载
#include<iostream>
using namespace std;
void func(int x,int); //第二个参数无名,(x可省略)函数原型声明,C和C++都允许省略形参名
int main(){
func(11,88)
return 0;
}
void func(int x,int){ //C++允许略写参数名,C不能省略(尽管没有用到这个参数)
cout<<x<<endl;
}
5.指针类型转换
//指针类型转换
#include <iostream>
using namespace std;
int main() {
int i=10,*pi;
double d=double(i); //显式类型转换
//等价于double d=(double)i;
cout<<d<<endl;
void *pv=&i; //正确
pi=(int *)pv; //正确
//pi=static_cast<int *>(pv); //正确
//pi=reinterpret_cast<int *>(pv); //正确
//pi=pv; //错误
cout <<*pi<<endl;
//cout <<*pv<<endl; //错误
}
6.循环体内声明循环控制变量
//循环体内声明循环控制变量
#include<iostream>
using namespace std;
int main(){
int sum=0,fact=1; //factorial阶乘
for(int i=1;i<=5;i++){
sum+=i;
fact*=i; //i is known throught the loop
}
//but i is not known here
cout<<"Sum is:"<<sum<<endl;
cout<<"Factorial is:"<<fact<<endl;
return 0;
}
7.复合语句中定义变量
//复合语句中定义变量
#include<iostream>
using namespace std;
void func(int a);
int main(){
func(10);
return 0;
}
void func(int a){
cout<<a<<endl; //输出10
if(a==10){
int a=5,i=20;
cout<<a<<i<<endl; //输出520
}
//cout<<i<<endl; (错误,i无定义)
}
8.使用"::变量名"可以访问具有文件作用域的变量
//使用"::变量名"可以访问具有文件作用域的变量
#include<iostream>
using namespace std;
int hour,minute; //定义全局变量
void incTime(int hour,int minute);
int main(){
int hour=23,minute=58; //定义局部变量
incTime(::hour,::minute); //访问全局变量
incTime(hour,minute); //访问局部变量
incTime(::hour,::minute); //访问全局变量
return 0;
}
void incTime(int hour,int minute){
minute++; //形式参数
if(minute>=60){
minute=0;
hour++; //形式参数
if(hour>=24) hour=0;
}
::hour=hour; //使全局变量等于局部变量
::minute=minute;
cout<<"The time is "<<hour<<":"<<minute<<endl;
}
9.变量作用域的演示实例
//变量作用域的演示实例
#include<iostream>
using namespace std;
int x=1;
void func();
int main(){
cout<<"全局变量"<<x<<endl;
cout<<"通过::限定符访问全局变量"<<::x<<endl;
func();
return 0;
}
void func(){
int x=2; //局部变量,隐藏了全局变量
cout<<"局部变量"<<x<<endl;
{
int x=3; //复合语句中定义的局部变量
//它隐藏了局部和全局变量
cout<<"复合语句中定义的局部变量"<<x<<endl;
cout<<"可以通过::限定符访问全局变量"<<::x<<endl;
cout<<"但不能访问被隐藏的局部变量"<<endl;
}
cout<<"复合语句结束后又可以访问局部变量"<<x<<endl;
cout<<"当然还是可以通过::限定符访问全局变量"<<::x<<endl;
}
/*******************************************
程序输出结果如下:
全局变量1
通过::限定符访问全局变量1
局部变量2
复合语句中定义的局部变量3
可以通过::限定符访问全局变量1
但不能访问被隐藏的局部变量
复合语句结束后又可以访问局部变量2
的人还是可以通过::限定符访问全局变量1
********************************************/
10.数组边界核查
//数组边界核查
//C++和C语言都不会对数组边界进行核查
#include<iostream>
using namespace std;
int main(){
int i=0,crash[10];
for(;i<100;i++){
crash[i]=i; //执行上述程序片段将造成不可预料的结果,并且错误难于定位
}
/* for(int j=0;j<100;j++){ //测试
cout<<crash[j]<<endl;
} */
return 0;
}
11.使用cin.getline从键盘读入字符串
//从键盘读入字符串
//cin不能输入空白符,遇到空白符停止(在字符数组中可能输入会超过数组边界-遇到空白符才停止)
/*cin.getline:第一个参数是要存储字符串的数组的名称。第二个参数是数组的大小。
当 cin.getline 语句执行时,cin读取的字符数将比该数字少一个。为null终止符留出空间。 */
#include<iostream>
using namespace std;
int main(){
char s[80];
cout<<"Enter a string"<<endl;
//cin>>s; //read string from keyboard
//应改为: (否则遇空白停止,可能输入超过80个字符)
cin.getline(s,80); //最多输入79个字符,null 终止符将自动放在数组最后一个字符的后面。
cout<<"Here is your string: "<<s<<endl;
return 0;
}
12.const修饰符
/* const修饰符在C++中很常用(const修饰符是不变的意思)
在C语言中,下述语句是错误的:
const int N=10;
//必须改为 #define N 10
int a[N];
但在C++中,上述语句是允许的 */
/*
!!!返回min, &min, const &min 的区别!!!
1.返回min(对象)
返回的是值,只能出现在赋值符号的右边,效率较低,将欲返回的对象用"拷贝构造函数"
拷贝给调用者,然后调用"析构函数" 销毁这个临时对象。
2. 返回&min(对象引用)
返回的是引用,可以出现在赋值符号的左边(当然可以出现在赋值符号的右边),
将欲返回的对象引用(实际上就是地址)直接赋值给调用者,效率较高。
3.返回const &min(常对象引用)
返回的是常引用,只能出现在赋值符号的右边,将欲返回的对象引用(实际上就是地址)
直接赋值给调用者,效率较高。对自定义的类一般用这种方式返回,常常用来取代第一种方式
*/
/*
1、const double PI=3.14;
//常量