您的位置:首页 > 编程语言 > C语言/C++

C++知识总结

2014-03-08 13:29 211 查看
这次总结在看完一遍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类  记不住请查询资料
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: