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

c++语法笔记

2016-04-10 20:45 411 查看
0.1const char *&:引用本身可以改变,但指向的值不可以改变

0.2char *const &

一.c++类和对象

1.1 public:类外部都可以访问

1.2 private:私有成员,只能在类中访问(只有类和友元函数可以访问私有成员。)

1.3 protected: 只能本类和子类能够访问修饰的成员

2.1构造函数:classname::classname(type var),如果是无参构造函数,就不要在对象生命中包括任何源括号。则A a()是错误的

A a或者A a(type var)或者A a = A()

2.2析构函数:classname::~classname(void)

3.1c++拷贝函数(浅拷贝):classname (const classname &obj)(可以省略,默认只是拷贝对象),系统为对象 B 分配了内存并完成了与对象 A 的复制过程(classname B = A,A为classname对象)

此时拷贝函数是浅拷贝,只是引用计数增加,析构函数也会调用多次,然而是使用delete的时候也仅有一个对象被销毁。

(&只是别名,没有增加应用计数,所以当使用引用参数时,对象的计数器没有增加,引用并不产生对象的副本)

3.2c++友元函数:friend修饰符,在类的定义中声明,可以访问类中的所有变量,定义的时候不用加上类名(函数传值也是值传递,要调用析构函数一次)

3.3c++内联函数:inline

4.1this指针:this指针是所有成员函数的隐含参数,在成员函数的内部可以直接使用this,友元函数没有 this 指针,因为友元函数不是类的成员。

4.2static成员(变量,函数):共享的,只有一个副本,静态成员函数只能访问静态数据成员,不能使用this指针,因为this指针是和对象绑定的,使用classname::var(fun())来访问。

4.3静态类变量:只能在class body外初始化,type classname::var = value,不能再构造函数,main函数内

二.继承

1.1class subclassname:public(privata、protected) parentclassname

1.2访问控制权限:父类中的protected和public成员才能被子类访问

1.3非继承关系:父类的构造函数、析构函数、拷贝函数、重载运算符、友元函数

1.4继承类型:

public:父类的公有成员也是子类的公有成员,父类的保护成员也是子类的保护成员,父类的私有成员可以通过父类的函数进行访问。

protected:父类的共有成员和保护成员成为子类的保护成员。

private:父类的共有成员和保护成员成为子类的私有成员。

1.5拷贝构造函数:直接A a;A b = a,这样会使a和b中的指针成员(动态内存)指向的是同一个,毕竟是前拷贝,而析构函数是当对象离开作用域时就会调用的函数,如果在析构函数中使用了delete就会导致对同一块

内存进行多次操作,所以使用拷贝构造函数

1.6拷贝构造函数调用的地方:

1):声明一个对象,并且由同类型的另一个对象初始化A a,A b = a或者是A b(a)

2):函数返回一个对象

3):传值调用函数

总结:拷贝构造函数就是以上三个条件时进行调用的函数,和构造函数的地位一样,只是调用场合不一样,一般来说和构造函数结构一样

1.7使用父类的函数(子类已经重写):subobj.classname::functionname();

在子类中调用父类的函数:classname::functionname();

三.多态

1.1虚函数:如果子类中重载了父类中的函数,那么在编译器期间就会跟着申明调用:parentclass *name = subobj(),name->function(),此时调用的是父类的函数,在函数声明处叫上virtual可以解决这个问题

1.2虚函数定义:虚函数 是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。

我们想要的是在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接,或后期绑定。

1.3纯虚函数:virtual int area() = 0;

1.4抽象类:类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 "= 0" 来

1.5如果基类中的函数是virtual的,则子类中该函数的声明也是virtual的

1.6virtual函数,在子类中实现的时候叫重写

四.高级部分

1.1内部类:在类中定义一个类,可以在类out中声明类in,然后在out外面定义如class out::in {},内部类可以把外部类作为参数,外部类不能把内部类作为参数

1.2迭代器:iterator种类

1).正向迭代器,++

2).双向迭代器,++,--

3).随机访问迭代器:++,--,随机访问p
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: