优秀的编程知识分享平台

网站首页 > 技术文章 正文

C++基本语法知识整理(c++语法格式大全)

nanyue 2024-07-18 22:20:29 技术文章 19 ℃

C++作为排名前5的编程语言(根据TIOBE世界编程语言排行榜,排名前5的分别是:java, c, python, c++, visual basic.net),其复杂程度却排第一

C++语法中涉及的概念也非常多,相信很多初学者在开始学习这门语言时,经常出现看了后面忘了前面的情况。有时候在编程时,总是会被一个基本概念“卡壳”,不得不去厚厚的语法书中查阅这个概念。这里,我根据实际工作中经常会遇到问题,整理了一些语法知识,大家可以收集在手机上,供平时查阅。

基础概念

  1. 继承:指基类和派生类之间的关系;
  2. 多态:就是一个名字或符号具有多种含义,通过重载来实现。有函数重载和运算符重载两种。
  3. 函数重载是静态多态性的具体示例,虚函数是动态多态性的具体示例;
  4. 泛型是一种特殊形式的静态多态,实现方式是类型参数化。使用模板机制的程序设计就是泛型编程;
  5. p=new double(1.0),表示初始值就是1.0,使用delete p释放;
  6. p=nwe double[10],表示分配10个double数组,使用delete []p释放;
  7. 构造函数初始化列表,语法如下:
构造函数名(参数列表) [:成员名(表达式)[,成员名(表达式)...]

上面初始化列表等价与在构造函数体内执行如下赋值操作:

成员名=表达式;

类占用内存大小

  1. 类的成员函数并没有包含在对象的存储空间,类对象的大小可以粗略的认为是成员变量的大小(静态变量除外)
  2. 成员函数还是以一般的函数存在,只是名义上是类里的,成员函数的大小不在类里面。同一个类的多个对象共享函数代码
  3. 空类占用1字节,因为C++要求每个对象在内存中都有独一无二的地址;
  4. 类中有虚函数时候,有一个指向虚函数的指针(vptr),无论有多少个虚函数,只有这一个指针,占用4字节;
  5. 子类的大小是本身成员变量的大小加上父类的大小;
  6. 父类子类共享一个虚函数指针;
  7. 类的大小往往被调整到系统的整数倍。

类中易混淆概念

  1. 在一个类中,静态数据成员被该类的所有对象共享。无论建立多少个该类的对象,都只有一个静态数据实例。静态数据成员属于类,不属于对象
  2. 静态成员函数属于类,不是某个类对象
  3. 所有类对象共享唯一的静态成员;
  4. 父类对象=子类对象,这种复制是合法的。反过来则不合法;
  5. 如果一个类至少有一个纯虚函数,那么就称该类为抽象类;
  6. 容器类自动申请和释放内存,无需new,delete;
  7. vector矢量类的size方法返回实际元素个数,capacity表示空间能力,按照2的幂进行设置,当size>capacity时,vector会重新分配空间,原空间释放;
  8. 创建子类对象后,系统先执行父类构造函数,再执行子类构造函数
  9. 子类一但重写父类的方法,子类对象就无法再使用父类的这个方法了。不建议这样做。
  10. 派生类的函数名将屏蔽基类中重名的函数,即使他们的原型不一致。只要子类中的函数名与父类相同,即使参数不同,也相当于覆写,子类对象无法再使用父类的方法了!
  11. 在编写的很好的c++程序中,作为友元出现的重载运算函数是为数不多的全局函数。在c++中,为了充分体现面相对象的思想,应该尽量少用全局函数。

友元机制

  1. 一个对象的私有数据只能通过成员函数进行访问,如果某些类的成员原则上应该是私有的,但需要外部频繁的访问它们,C++提供了一种辅助手段,允许类外面的类或函数访问一个类的私有数据,这就是友元机制;
  2. 一个类的友元可以是一个外部函数,也可以是一个类。它们虽然不是该类的成员,但能访问该类的任何成员。
  3. friend关键字必须放在类中声明,但放在哪个段里无关紧要。
  4. 友元函数必须在参数表中显示的指明要访问的对象,而成员函数知道在哪个对象中操作;
  5. 由于友元函数破坏了封装机制,建议尽量使用成员函数,除非在不得已的情况下才使用。

友元函数声明如下

class classname{ friend int f(); }

友元函数例子:

class Calculator{ public: int perimeter(const Rectangle& r);}class Rectangle{ private: int width,height; public: friend int Calculator::perimeter(const Rectangle& r);}int Calculator::perimeter(const Rectangle& r);{ return r.width+r.height;}

也可以将整个类定义为友元:

friend class classname;

这样该友元类中所有成员函数都是友元函数。

好了,先整理这么多,希望对大家有用。

最近发表
标签列表