C++学习笔记
以前虽然学过C++,但是感觉就是C的风格,现在开始认真学习一下C++了。
1.输入输出流
如果不加using namespace std,则cin和cout前面需要加std::
像这样:
#include<iostream>
//using namespace std;
int main(){
int a;char buf[50];
std::cin>>a>>buf;
std::cout<<a<<buf<<std::endl;
return 0;
}
(加了的话,std::可写可不写)
2.动态内存分配
C语言通过malloc和free进行动态内存的分配和回收
C++通过new和delete进行。(int是一种type)
new的第一种使用方法:
int *p; p=new int; if(p==NULL) printf("Allocation Failure!\n"); else { *p=2333; cout<<*p; delete p; }
还可以用new运算符初始化单个数据的存储区:
int *p; p=new int(2333); if(p==NULL) printf("Allocation Failure!\n"); else { cout<<*p; delete p; }
`动态分配一维数组的存储空间:
type *p; p=new type[num]; //num是数组元素的个数 delete []p; //中括号代表以数组的方式删掉
3.函数的定义和调用
Attention: 不能以形参名字或参数返回类型的不同来区分函数。即,如果两个函数名字相同、形参数量以及类型相同,但是一个是int,一个是float,仍然不可。
C++也有带默认型参数的函数。在定义时预先声明默认的形参值,在调用时若给出实参,则用实参初始化形参,否则采用预先声明的形参值。
默认形参值必须按照从右向左的顺序声明,在有默认值的形参右边,不能出现无默认值的形参。
默认形参值可以在函数原型中给出。
在不同的作用域内,允许说明不同的默认形参值。(有点类似局部变量与全局变量的覆盖关系)
4.内联函数
用inline定义的函数-内联函数
在编译时在调用func的地方用函数体进行了替换,所以程序执行时会减少调用开销。
并非所有函数都需要定义为内联函数-一般只将那些频繁被调用的,且函数体较小(只有几条语句)的函数定义为内联函数。
内联函数不允许有循环语句和switch语句,否则就当普通函数来处理了。
5.常量
宏定义#define 和 const 的区别:#define只在编译时完成宏替换,在程序运行期间不占内存空间;const定义的常量在程序运行期间占据内存空间(只是用const来指明该内存空间的只读约束)
6.引用
C++独有。
1.独立引用
int m=8,k; int &pm=m; /* pm是m的引用,代表同一个内存单元 在声明独立引用时必须对它初始化,这种情况下的别名绑定是永久的。 */
2.引用作为函数参数
传递引用比传递指针效率更高。
(eg: swap函数)
指针传递:
void swap1(int *a,int *b){ //指针传递 int t=*a; *a=*b; *b=t; } swap1(&a,&b);printf("%d %d\n",a,b);
引用传递:
void swap2(int &a,int &b){ int t=a; a=b; b=t; } swap2(a,b);printf("%d %d\n",a,b);
返回引用:函数返回引用,实际上返回的是一个存储单元(变量),即“左值”。
如果一个函数返回引用,那么函数调用可以出现在赋值号的左边。
eg:
int &f(int *pint){ return *pint; } int main(){ int a=10,b; b=f(&a)*10; f(&a)=88; cout<<a<<' '<<b<<endl;
输出:88 100
7.类与对象
1.类是一种抽象数据类型,声明形式如下:
class ClassName{
数据成员; //用于表达数据抽象
函数成员; //用于表达行为抽象
}; //关键字class用于声明一个类类型
eg:声明类举例:
class Clock(){ int Hour,Minute,Second; void SetTime(int h,int m,int s); void ShowTime(); };
访问控制
数据封装的目的就是信息隐藏。为了达到信息隐藏,在C++类中,并非所有的成员都是对外可见的。(或者说,是类外可以访问的)
访问控制属性有:public、protected、private
class ClassName{
public:
公有成员 //任何类内、类外函数都可以访问公有数据和函数
protected:
保护成员 //与private类似,其差别表现在继承与派生时对派生类的影响不同
private:
私有成员 //只允许本类中的函数访问,而类外的任何函数都不能访问
};

浙公网安备 33010602011771号