1.封装:将记录包起来让其自己去干。
2.抽象:记录一下这些家伙的属性,比如都是人。
3.继承:生下来的儿子跟父亲一个鸟样。
4.多态:儿子除了含有父亲的内容外,还有自己的特征。
5.头文件中不加“.h”。
6.加上命名空间 using namespace std; //后期考虑到C++主要用在大型程序设计,可以不加,但是一些调用的类型要用std::xxoo的形式。
7.cin>>i;输入(面板输入到i) cout<<xxoo<<endl;输出 ;
cin.peek()的返回值是一个char型的字符,其返回值是指针指向的当前字符,但它只是观测指针停留在当前位置并不后移;
cin.get()用来从指定的输入流中提取一个字符(包括空白字符);
#include<iostream>
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<<sum<<endl;
return 0;
}
运行结果:
11 11 22 11
55
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<int> q1;//表示q1是一个队列
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<class T>//模板定义某种模糊类型为T
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 T>
class Myclass
{
Myclass();//构造函数
void swap(T &a,T &b);//模糊类型引用的成员函数
};
Myclass<T>::Myclass()
{
}//类模板定义后的构造函数初始化需要加<T>