1.C到C++
头文件
—.h变成c—多了<iostream库输入输出流,<algorithm库提供了一次常用的算法(min,max,swap…)
using namespace std;
一个名称空间,用来缓解复杂程序的组织问题
C++支持函数的重载,可以用张三:函数(),李四:函数()的方式调用,有了名称空间,就不用std::set等等了直接set
2.引用&,参数按照传引用的方式传递出来
void swap2(int&a,int&b){
int t = a;
a = b,b = t;
}
3.字符串
<sstream库,之前写了一篇,里面有讲解,string,sstream更慢,应谨慎使用
string line;
getline(cin,line);
int sum = 0,x;
stringstream ss(line);
while(ss>>x)sum+=x;
cout<<sum<<endl;
4.再谈结构体struct新加的概念同样适用于类class
挂一篇【C++】C++还能这么用–结构体构造函数、成员函数、创建链表,我看后对结构体的各个影响更加加深了
成员变量
int age ;
string name;…
成员函数
在C++结构体的成员函数中,this是指向当前对象的指针
构造函数实现(Point() == Point(0,0))
实现Point a,b(1,2);的初始化
结构体Point中定义了一个函数,函数名也为Point,但是没有返回值,这样的函数称为构造函数
C++结构体可以有一个或多个构造函数,在声明变量时调用
C++中的函数(不只是构造函数)参数可以拥有默认值
template <typename T>
struct Point{
T.x,y;
Point(T x = 0,T y = 0):x(x),y(y){}
//也可写成
Point(T x = 0,T y = 0){this->x = x;this->y = y;}
}
添加对结构体和类的运算符定义
template <typename T>
struct Point{
int x,y;
Point(int x = 0,int y = 0):x(x),y(y){}
}
Point operator +(const Point&A,const Point&B){//定义运算符
return Point (A.x+B.x,A.y+B.y);
}
ostream& operator << (ostream &out,const Point*p){//定义输出流
out<<"("<<p.x<<","<<p.y")";
return out;
}
int main(){
Point a,b(1,2);//由于构造函数从而这样定义结构体变量
a.x = 3;
cout<<a+b<<endl;
}
5.模板
减少函数的局限性,使int,double,等类型数组都可以求和
template<typename T>//所有类型都换成T,之后就可对所有类型进行运算了
T sum(T*begin,T*end){
T*p = begin;
T ans = 0;
for(T*p = begin;p!=end;p++)
ans = ans + *p;//没有使用+=,是没有定义结构体的运算符+=,这个结构体也要定义+
return ans;
}
这里的运算符有一点变化初始化加上<>类型,函数加上<>T
template <typename T>
struct Point{
T.x,y;
Point(T x = 0,T y = 0):x(x),y(y){}
}
template <typename T>
Point<T> operator +(const Point<T>&A,const Point<T>&B){//定义运算符
return Point<T> (A.x+B.x,A.y+B.y);
}
template <typename T>
ostream& operator << (ostream &out,const Point<T>*p){//定义输出流
out<<"("<<p.x<<","<<p.y")";
return out;
}
int main(){
Point<int> a,b(1,2);//由于构造函数从而这样定义结构体变量
Point<double>c(1.1,2.2),d(3.3,4.4);
a.x = 3;
cout<<a+b<<" "<<c+d<<endl;
}