1.封装:将记录包起来让其自己去干。
2.抽象:记录一下这些家伙的属性,比如都是人。
3.继承:生下来的儿子跟父亲一个鸟样。
4.多态:儿子除了含有父亲的内容外,还有自己的特征。
5.头文件中不加“.h”。
6.加上命名空间 using namespace std; //后期考虑到C++主要用在大型程序设计,可以不加,但是一些调用的类型要用std::xxoo的形式。
7.cin>>i;输入(面板输入到i) cout< cin.peek()的返回值是一个char型的字符,其返回值是指针指向的当前字符,但它只是观测指针停留在当前位置并不后移; cin.get()用来从指定的输入流中提取一个字符(包括空白字符); #include 8.ungetc(ch,stdin);//将变量ch中存放的字符退回给stdin输入流(其中ch=getchar();面板输入的字符被ch赋予,为了使其重新回到面板中可以使用该句) 9.构造函数:对象可以使用的函数。比如:in.open() 10.可以加std::cin.ignore(100,‘\n’);std::cin.get();//暂停结束,直到任意输入一字符再结束(这里的ignore()表示忽略100个字符,除非是\n就不忽略) 11.函数重载:将函数的作用重新定义 12.局部变量需要初始化为0 13.在string str;时,由于cin>>str会由于遇到空格便结束,所以要改为getline(cin,str);//表示用cin的方式输入一串东西给str 14."&"表示获得变量的地址 15.用‘ ’括起来的表示为单个字符 16.int *p1=&myInt,这里表示的指针是存地址 *p1=233;这里表示的是解引用,给地址在p1中的内存位置赋值233 17.如果函数形式为swap(int *p,int*q),传入的参数应该为地址swap(&p,&q) 形式为swap(int &p,int &q)时,直接传入参数就行,即为swap(p,q) 18.用typedef来为一个类型定义创建一个别名:typedef int* intPointer,意思就是说,intPointer=int* 19.类 class Myfirstclass { };//要求类名的第一个字母采用大写,同时在类声明末尾必须有一个分号,类主要由里面的变量还有函数组成 20.queue(模板类)队列:需要元素类型 eg:queue queue的基本操作: 入队:q.push(x);将x接到队列的末端 出队:q.pop();弹出队列的第一个元素,并不会返回其值 访问队首元素:q.front();即最早被压入队列的元素 访问队尾元素:q.back();即最后被压入队列的元素 判断队列空:q.empty();当队列空时,返回true 访问队列中元素的个数:q.size(); 21.构造器 class Car { Car(void);//构造函数名字与类名一样 }; Car::Car(void){ }//定义构造函数内容 22.析构器 class Car { Car(void); ~Car();//析构函数,避免内存泄漏,可在析构函数中加内容 Car::~Car() { } 23.继承: class Animal { public: std::string mouth; void eat(); }; class pig:public Animal { void sleep(); };//继承父类的所有内容,并可以拥有自己的内容 void Animal::eat() { }//对函数内容进行填充 24. public:允许任何代码访问 protected:允许这个类本身还有它的子类访问 private:允许这个类本身访问 25.在类里面加 friend class xxoo,表示另一个类xxoo可以调用这个类里面的东西 26.直接创建一个指针并让它指向新分配的内存块 int *pointer=new int; *pointer=110;//将内存块存进去内容 std::cout<<*pointer; delete pointer;//要求每一个new都是需要一个delete,避免占用太多死内存,导致内存泄漏 27.在基类中声明函数为虚函数(在函数前加virtual),这样在子类中对函数进行重载后,在后期调用时,即使用基类类型定义子 类的构造函数如: Parent *child=new Child("xxoo");//构造函数为Child,开辟了一个新内存空间放着构造函数,并向构造函数中输 入参数,但是由于是定义的指针类型是基类的,所以默认的内存块中的同名函数引用的是父类的,没办法体现出函数的重 载,所以在基类中将后期要重载的函数变为虚函数,这样就能使得成功调用重载函数 28.抽象方法:就使27中的虚函数=0,eg:virtual void play()=0;表示该函数没有内容定义,告诉编辑器不用查找里面的内容 29.基类中的析构函数应该写为虚函数,是为了子类中的析构函数能被正确调用,然后再调用基类中的析构函数,析构函数都是 在main()中所有代码执行结束后再调用的。 30.在进行多继承时,为了防止子类的两个基类中都含有相同的属性(此时两个基类可能是从同一个基类中继承而来得的),在 原基类继承更高级的基类中应该使用虚继承: class Teacher:virtual public Preson { }; class Student:virtual public Person { }; class Teachstudent:public Teacher,public Student { };//可以避免该类中含有两份Person内的属性 31.动态数组:int *x=new int[10];//x地址指向新开辟的整形数组的头地址 赋值方式为:x[1]=...;x[2]=...; delete[] x;//删除开辟出来的数组空间 32.模板定义: template void swap(T &a,T&b)//模糊类型引用 { T temp=a; a=b; b=temp; } int main() { int i1=100; int i2=200; swap(i1,i2); std::string s1="JJJ"; std::string s2="rrr"; swap(s1,s2); return 0; } 33.模板定义后的类进行初始化 template class Myclass { Myclass();//构造函数 void swap(T &a,T &b);//模糊类型引用的成员函数 }; Myclass { }//类模板定义后的构造函数初始化需要加
using namespace std;
int main(){
int sum=0;
int c;
while(cin>>c){
sum+=c;
while(cin.peek()==' '){ //屏蔽空格 //探测并不移除
cin.get();//获得并移除
}
if(cin.peek()=='\n'){
break;
}
}
cout<
}
运行结果:
11 11 22 11
55