C++重点难点汇总精华
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
封装继承多态
1.封装,数据部分,class name
2.继承,在实现程序时,可以像生活中儿子继承父母遗产一
样,子类将父类中的属性(类中的数据成员)和行为(类中的成员函数) 继承,从而实现父类所有内容为子类所用的功能(代码重用)
3.多态,在实现程序时,可以将父类的行为(类中的成员函
数)再次定义从而实现新的行为(重载,重写),使程序的执行结果多样化
其实类的话和结构体的字节大小算法不一样,不管它的大小Public(本类,子类,其他类) --- 》 protected(本类,子类) --- 》 private(本类)。
Private私有的只能在一个地方(本类)访问。
类的初始化
1.在类里面,必须创建对象之后才能初始化,不能在类里面
直接初始化。一般数据类型不能在类外面初始化,但是静态的(static)类型可以再类的外面进行初始化--(有且只有static在类外可以初始化,因为静态的是在全局数据区存放的,在编译的时候就给它分配内存了)。
2.类里面的数据可以是任意的,但是不能有本类的对象(因
为不知道怎么分配内存),本类的指针是可以的,
3.静态函数当中不能出现this,this是在运行的时候才有。构造函数
1.构造函数的作用就是对类里面的数据进行初始化
2.构造函数是自动调用
3.构造函数不能写返回值,
4.最好写一个自己的默认构造函数以防止出现错误。
Malloc只能分配堆内存,new不仅能分配内存调用有参数的构造函数,对类的数据进行初始化。
构造函数可以用(初始化列表)
student():count(0);
student(char *name,Int age,int c):count(c);
对常量count进行初始化。
引用也必须在初始化列表当中进行初始化。
初始化列表的顺序是按照定义的顺序,并且是包含的小类先执行,它比构造函数还先执行。
当类内有成员为指针的时候,不能简单的复制,要把堆内存分配,然后再把值拷过来,
析构函数()
为了避免内存泄露用到析构函数,析构顺序与构造函数的顺序正好相反!
迭代器
String-----str.reserve(20),只改变容量str.capacity
String-----str.resize(30),改变实际的字节数str.size,str.length,当然还有str.capacity
1.Str.append连接,
2.str.assign拷贝,
3.str.at(0)修改第一个字符,
4.str.empty()判断是空返回1;
pare()比较字符串(相等返回0)
6.str.substr(0,5)截取字符串;
7.str.swap(str2)交换;
8.str.find;查找
str.find_first_of;---str.find_first_not_of;
9.str.replace(0,5,”hello”);
10.str.insert();字符串插入
string迭代器
相当于指针
返回一个对象的时候,调用拷贝函数
静态数据成员
不管有多少个对象,静态数据成员只有一个内存,它会随着对象的改变而直接改变;(可以用它来记录有多少个对象)
**1.静态成员函数不能调用非静态成员函数,但是可以调用静态成员函数(因为静态成员函数是在编译的时候分配内存,一般函数是在运行的时候才分配内存).静态只能访问静态
的!
**2.一般函数可以调用静态函数.
嵌套类(外部类内部类)
内部类不可以访问外部类的一般数据,只能访问静态数据,
但是外部类可以访问内部类的任何类型数据(这是由于内部类和外部类是两个类,编译的时候先编译内部类再编译外部类的).
局部类
局部类里面不能有静态的数据成员和静态的成员函数;
友元
友元啊,在定义类里面给函数前面加上friend即可,
可以将一个类定义为另一个类的友元类……
指向类中数据成员的指针,注意声明的时候要加类域,初始化也要注意,(int student::*p;
P = &student::age
Stu.*p = 10)
例子如下:
#include
#include
using namespace std;
class student
{
public:
int age;
student(){}
int fun(int age)
{
this->age=age;
return this->age;
}
};
int main()
{
student stu;
int student::*p;
p=&student::age;
stu.*p=10;
cout< int(student::*pfun)(int); pfun=&student::fun; int result=(stu.*pfun)(20); cout< } 继承 父类的私有部分不能被继承, 先按照继承的顺序执行调用构造函数, 例如: #include #include using namespace std; class A { public: A(int){cout<<"A construct"< }; class B { public: