C++ 学习—[2]C++概述

2.1 C++的起源和特点

2.1.1 起源

C++是从C语言演变而来的。

2.1.2 特点

C++的主要特点:
(1):全面兼容C,并对C的功能作了不少扩充。
(2):增加了面向对象的机制。

最有意义的方面是支持面向对象的特征。

2.2 C++源程序的构成

2.2.1

例2.1 计算两个整数之和

#include <iostream>
using namespace std;
int main()
{
	int x, y, sum;
	cout << "Please input two integers:" << '\n';
	cin >> x;
	cin >> y;
	sum = x + y;
	cout << "x+y=" << sum << endl;
	return 0;
}

2.2.2 C++程序的结构特性

面向对象程序分为:
1:类的声明部分
2:类的使用部分
(1):主函数
(2):子函数

2.3 C++在非面向对象方面的扩充

2.3.1 注释行

和C语言一样,不做过多说明。

2.3.2 C++的输入和输出

1、C++依旧可以使用printf和scanf。
2、增加了cin和cout两种标准输入输出流。

#include <iostream>
using namespace std;
int main()
{
    char name[20];
    cout<<"Hello,you name:"<<endl;
    cin>>name;
    cout<<"My name is "<<name;
    return 0;
}

输出 cout << 数据
输入 cin >> 变量 记得使用空格
两种换行 \n 和 endl

3.dec把转换基数设置为十进制,hex把转换基数设置为十六进制,oct把转换基数设置为八进制,默认为十进制。
例2.4 操纵符dec、hex、oct的使用。

#include <iostream>
using namespace std;
int main()
{
    int x=25;
    cout<<hex<<x<<' '<<dec<<x<<' '<<oct<<x<<'\n'; 
    //hex是转换成十六进制,dec转换成十进制,oct是转换成八进制
    return 0;
}

2.3.3 灵活的局部变量的使用

C++允许在代码块中的任何地方说明局部变量,“先定义,后使用”
1:在大函数中,在最靠近使用变量的位置说明变量较为合理。
2:在较短的函数中,把局部变量集中在函数开始出说明较好。

2.3.4结构名,联合名,枚举名可直接作为类型名

在C++中,结构名,联合名,枚举名可直接作为类型名。
例如:

enum Bool{FALSE,TURE};
struct String
{ char *ptr;
int length;
}
可直接说明为:
Bool done;
String str;

2.3.5 const 修饰符

例2.6 用const取代#define

#include <iostream>
using namespace std;
int main()
{
    int a=1;
    int const T1=a+a;
    int const T2=T1-T1;
    cout<<"T2 is "<<T2<<endl;
    return 0;
}
类别区别表示
指向常量的指针可以改变指针地址,不能改变数据const char* name =“chen”
常指针可以改变数据,不能改变地址char* const name =“chen”
指向常量的常指针地址和数据都不可以改变const char * const name =“chen”

2.3.6 函数原型

(1):函数原型的参数表中可不包括参数的名字,而只包含它们的类型。
(2):函数定义由函数说明和函数体两个部分组成。
(3): 标准C++要求main函数必须声明为int类型。

2.3.8 带有默认参数的函数

所有指定默认值的参数都必须出现在不指定默认值的参数的右边。
如int fun(int i,int j,int k=5);

2.3.9 函数的重载

只要函数参数的类型不同,或者参数的个数不同,或者二者都满足,两个或者两个以上的函数可以使用相同的函数名。
例2.11 参数类型不同的函数重载

#include <iostream>
#include <iomanip>  //和setprecision(i)搭配使用i为数字
using namespace std;

int square(int i);
long square(long l);
double square(double d);

int main()+
{
    int i=12;
    long l=1234;
    double d=5.67;
    cout<<i<<'*'<<i<<'='<<square(i)<<endl;
    cout<<l<<'*'<<l<<'='<<square(l)<<endl;
    cout<<setprecision(4)<<d<<'*'<<d<<'='<<square(d)<<endl;
    return 0;
}
int square(int i)
{
    return i*i;
}
long square(long l)
{
    return l*l;
}
double square(double d)
{
    return d*d;
}

例2.12 参数个数不同的函数重载

#include <iostream>
using namespace std;
int mul(int x,int y)
{
    return x*y;
}
int mul(int x,int y,int z)
{
    return x*y*z;
}
int main()
{
    int a=3,b=4,c=5;
    cout<<a<<'*'<<b<<'='<<mul(a,b)<<endl;
    cout<<a<<'*'<<b<<'*'<<c<<'='<<mul(a,b,c)<<endl;
    return 0;
}

注意:若两函数的参数个数和类型都相同,而只有返回值类型不同,则不孕讯重载。

2.3.10 作用域运算符“::”

例2.13 全局变量和局部变量同名

#include <iostream>
using namespace std;
int avar=10;    //全局变量avar
int main()
{
    int avar;           //局部变量avar
    avar=25;
    cout<<"avar is "<<avar<<endl;   //输出局部变量avar
    return 0;
}

例2.14 作用域运算符的使用

#include <iostream>
using namespace std;
int avar=10;
int main()
{
    int avar;
    avar=25;
    cout<<"local avar is  "<<avar<<endl;
    cout<<"global avar is  "<<::avar<<endl;
    return 0;
}

2.3.13 运算符new 和delete

内存分配的基本形式:

指针变量名=new类型;
delete 指针变量名;

(1):使用malloc 函数时必须使用sizeof函数来计算所需要的字节数,而new可以自动计算分配。
(2):new能自动返回正确的指针类型。
(3):使用new可以为数组动态分配内存空间(需要在类型后面缀上数组大小)

int *pi=new int[10];
int *pi=new int[2][3][4];
一维可以是任何合法的正整数表达式
int i=3;
int *pi=new int[i][3][4];

(4):new可在为简单变量分配内存的同时进行初始化

指针变量名 =new 类型(初值)

//使用new 和delete进行内存的分配和释放

/* #include <iostream>
using namespace std;
int main()
{
    int *ptr;       //定义一个整型指针变量ptr
    ptr=new int;    //动态分配一个整型存储空间,并将首地址赋给ptr
    *ptr=10;
    cout<<*ptr;
    delete ptr;     //释放指针ptr指向的存储空间
    return 0;
} */

/* #include <iostream>
using namespace std;
int main()
{
    int *p=new int(99);
    cout<<*p;
    delete p;
    return 0;
} */

/* 对动态分配是否成功进行检查 */
#include <iostream>
using namespace std;
int main()
{
    int *p=new int;
    if (!p)
    {
        cout<<"allocation failure\n";
        return 1;
    }
    *p=20;
    cout<<*p;
    delete p;
    return 0;
}

2.3.14 引用

1,引用的概念
相当于对变量起一个新的名字。

类型 & 引用名=已定义的变量名

变量和引用的关系

#include <iostream>
using namespace std;
int main()
{
    int i; 
    int &j=i;       //声明j是一个整型变量i的引用
    i=30;
    cout<<"i="<<i<<"j="<<j<<endl;   //输出i和引用j的值
    j=80;
    cout<<"变量i的地址:"<<&i<<endl; //输出变量i的地址
    cout<<"变量j的地址:"<<&j<<endl; //输出变量j的地址
    return 0;
} 

比较引用和指针的使用方法

#include <iostream>
using namespace std;
int main()
{
    int i=15;       //定义整型变量i,赋初值15
    int *iptr=&i;   //定义指针变量iptr,将变量i的地址赋给iptr
    int &rptr=i;    //声明变量i的引用rptr,rptr是变量i的别名
    cout<<"i is "<<i<<endl;        //输出i的值
    cout<<"*iptr is "<<*iptr<<endl;     //输出指针iptr的值
    cout<<"rptr is "<<rptr<<endl;       //输出rptr的值
    i=29;
    cout<<"After changing i to 29:"<<endl;  
    cout<<"*i is "<<i<<endl;        //输出i的值
    cout<<"*iptr is "<<*iptr<<endl; //输出指针iptr的值
    cout<<"rptr is "<<rptr<<endl;   //输出rptr的值
    return 0;  
}

指针变量作为函数参数

 #include <iostream>
using namespace std;
void swap(int *m,int *n)
{
    int temp;
    temp=*m;
    *m=*n;
    *n=temp;
}
int main()
{
    int a=5,b=10;
    cout<<"a="<<a<<" b="<<b<<endl;
    swap(a,b);
    cout<<"a="<<a<<" b="<<b<<endl;
    return 0;
}

引用作为函数参数的例子

#include <iostream>
using namespace std;
void swap(int &m,int &n)
{
    int temp;
    temp=m;
    m=n;
    n=temp;
}
int main()
{
    int a=5,b=10;
    cout<<"a="<<a<<" b="<<b<<endl;
    swap(a,b);
    cout<<"a="<<a<<" b="<<b<<endl;
    return 0;
} 

使用引用返回函数值

#include <iostream>
using namespace std;
int a[]={1,3,5,7,9};
int &index(int);
int main()
{
    index(2)=25;
    cout<<index(2);
    return 0;
}
int &index(int i)
{
    return a[i];
} 

引用实例

#include <iostream>
using namespace std;
int &max(int &num1,int &num2);
int &min(int &num1,int &num2);
int main()
{
    int num1,num2;
    cout<<"请输入第一个数:";
    cin>>num1;
    cout<<"请输入第二个数:";
    cin>>num2;
    max(num1,num2)=0;
    cout<<"\n找出最大数,然后把最大数赋值为0后,两个数分别为:"<<endl;
    cout<<num1<<"和"<<num2<<endl;
    cout<<"请输入第一个数:";
    cin>>num1;
    cout<<"请输入第二个数:";
    cin>>num2;
    min(num1,num2)=0;
    cout<<"\n找出最小数,然后把最小数赋值为0后,两个数分别为:"<<endl;
    cout<<num1<<"和"<<num2<<endl;
    return 0;
}
int &max(int &num1,int &num2)
{
    return (num1>num2)?num1:num2;
}
int &min(int &num1,int &num2)
{
    return (num1<num2)?num1:num2;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值