这次总结在看完一遍VC6.0++中的类之后 结合 《好学的C++》进行总结 顺便复习C++在C之上的改进:
1.增加了String 具体可以看寒假总结的C++ Primer
2.增加了引用&,引用必须指向是对象 相当于对象带了个面具,对带面具的对象操作相当于对原对象操作
3.增加了bool类型
4.作用于限定符 :: ,可以使用这个调用全局变量并且操作,abc与::abc可以分开,前者是局部变量,后者是全局变量,虽然名字相同
5.动态分配new 比如 int *ptr=new int[5];不需要给变量名 在C语言中的动态分配是 int *ptr=(int *)malloc(N*N*sizeof(int));
6.文件流:
#include <fstream>
ofstream fout("output.txt"); //fout是输出流名字 后面是输出的文件名字 如果打开文件失败 fout值为0
fout<<"I am student"<<endl; //这段字符串会直接写到output.txt文件中
fout.close(); //输出完记得关闭
#include <fstream>
char input[80];
ifstream file_in("input.txt"); //如果打开文件失败 fout值为0
for(int i=1;!file_in.eof();i++){ //一直到末尾
file_in.getline(input,80); //输出每一行
cout<<input<<endl;
}
C++Ox/C++11新增特性:
1.增加了long long类型
2.运用atoll函数(定义在cstdlib中)将字符串转换成long long 如何: long long n= atoll(string);
3.string.c_str()返回当前字符串的首地址
string.substr(i,i); 返回子串
4.#include <sstream> stringstream a;//字符串流
5.基于范围的for,对象可以是数组 容器 STL类 string对象 等等
int b[50];
比如 for(int &a:b) a=1; 对所有赋值1,加&进行值修改,不加只是用于调用其中的值,适用于需要对每个元素都进行同意处理的场合
6.auto 自动联系上下给变量一个类型
7.空指针指向不再是 NULL或者0 而是nullptr
8.enum class type {stblos} 枚举
9.static_cast 等等基于C语言以后改进的各种强制转换
10.R“(string)” 期中的字符串就是输出的字符串,比如R“(wo shi "yi ge" student)” 不像C语言中输出' 还需要用\" 比较麻烦
`
继承与类:
类的写法:
class name
{
public:
pravate:
protected:
public;
pravate:
protected:
}; //结构体没有;号,类才有;号,别忘记写
public 变量表示公共 可以被外界访问 protected只能被对象和子类访问
pravate只能通过成员函数访问,也可以通过友元访问 默认情况下变量声明为
private
定义在类里面的函数叫内联函数,引用公共变量可以用 ::(作用域标识符)
定义在类以外的函数应该这样写
type classname::function(argument)
{
statement;
}
每个类创建的时候会自动生成 构造函数进行初始化,这个构造函数可以自己编写,可以实现 构造函数多态(可以根据参数不同,编写不同的构造函数),在C++11中变量也可以直接初始化,保险起见,应该自己编写构造器,即使包含零条语句 子类中的构造函数不能继承,所以需要重写,构造函数不能声明为虚函数,c++11可以用 using basecalss:baseclss 进行继承父类构造函数,但一般C++程序不支持
class name
{
public:
name();
~name();
};
每个类创建还会自动生产一个析构函数 用于删除对象时候,收回占用的资源,析构函数可以设为虚函数,子类可以覆盖该函数,也可以自己编写析构函数,有点像OC中的delloc, 如果设置为虚函数时候,子类中有覆盖新增内容,应该先调用基类的析构函数,比如OC中就要先调用[super delloc];
class name(class const &source) 当传入的是一个对象的时候 记得用const 防止对象在副本内被修改
type *ptr = new type[size]; 可以创建一个动态数组,size可以由用户自己输入
delete []ptr; 记得删除
每个成员函数中都有this指针,指向的是当前调用此函数的对象,可以由this来访问定义的变量
STL库:
主要的就是list模版(链表容器)
list<type > name;
name.push_back(); 加入对象到容器中
list<type>::iterator namestr=name.begin(); 创建迭代器 相当于指针,可以指向容器中的数据
cout<<*namestr<<endl; 可以输出容器中的值
list模版自带一个sort name.sort(cmp); 用cmp可以设置排序方法
stack模版
stack<tepy> name; 可以创建一个栈
stack.push();
stack.top();
stack.pop();
stack.size();
stack.empty(); 有这5种方法直接操作
class name: public father class{
继承
};
继承有3种方式 public pravate protected 一般为了能访问父类所有函数和变量 声明为protected
C++11 中可以用 using baseclass;baseclass 让子类继承基类的构造器
多态,虚函数,真虚函数,模版
根据不同的函数参数,可以使用相同的函数名字,这就是函数重载
如果子类和父类都定义了相同的成员函数,main函数中调用就不知道调用哪个成员函数,有两种方法解决
1.clss::函数(); 进行调用指定类的成员函数
2.使用虚函数,把基类的函数设置为 virtual 子类中就可以进行函数覆盖,增加新的内容
纯虚函数和模版都是 把具体的类 抽象提出来成为抽象类(通用模版) 可以让多种不同类型变量同时使用
cout<<输出的时候必须知道变量的数据类型
控制台对象,I/O流处理符,输入输出流函数,I/O文件函数, 各种STL类 记不住请查询资料