欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 【C++总览】

【C++总览】

2026/3/11 14:59:31 来源:https://blog.csdn.net/a20040518/article/details/145201579  浏览:    关键词:【C++总览】

基础篇

C/C++的区别

面向对象三大特性:封装、继承、多态

封装:

封装是指将数据和操作这些数据的方法捆绑在一起,形成一个类。封装的核心思想是隐藏对象的内部实现细节,只暴露必要的接口给外部使用,保护数据的安全性和完整性。

  • 数据隐藏:通过控制类的成员的访问权限,避免外部直接访问或修改类的内部状态。
  • 接口暴露:只通过公开的方法来访问和修改类的内部数据。

继承:

继承是指子类可以继承父类的属性和方法。子类可以扩展或修改父类的功能,从而实现代码的重用和层次化结构。

  • 父类(基类):包含通用的属性和方法。
  • 子类(派生类):继承父类的属性和方法,增加特有的功能或修改父类方法。

多态:

多态是指同一个方法在不同的对象上有不同的表现。它允许不同的对象通过相同的接口来调用不同的实现。多态通过方法重写和方法重载来实现。

  • 方法重写:子类重新定义父类的方法,实现不同的行为。
  • 方法重载:同一个方法名根据参数的不同实现不同的功能。

面向过程与面向对象的区别

结构体与类的比较

指针与引用的区别

  • 指针是一个变量,存储另一个变量的地址。引用是对一个已经存在的变量起别名,不单独占用内存空间。
  • 指针可以多级,引用只有一级
  • 指针可以不初始化,引用必须初始化
  • 指针指向可变,引用不可变
  • 指针可以为空,引用不能为空
  • 对指针sizeof得到4或8,对引用sizeof得到引用对象所占大小

C++关键字

const

用来修饰函数、变量、对象,const在有些情况下是编译时确定,有些情况下是在运行时确定。

const与constexpr的区别

constexpr一定是在编译时确定。。。

static

static 类内

static 修饰成员属性:

1.不依赖对象,类共用的,不可以被继承(继承得到的是拷贝的一份属性,而静态成员只有一份,对象之间共享,所以不能继承),需要在类外初始化。

2.不能在.h文件初始化(重定义的问题),要在.cpp文件初始化。

static 修饰成员函数:

没有this指针,可以不依赖对象使用,类共用的,不可以声明为虚函数,不能直接调用类中的非静态成员,可以利用对象调用。

static 类外 

static 修饰类外函数:

只能在当前文件可见,不支持extern。
static 修饰类外变量:

1.只能在当前文件中可见。

2.一旦初始化后,生命周期贯穿整个程序的运行过程,并且只会初始化一次。

virtual

修饰虚函数,实现动态多态。父类是虚函数时,子类同名的成员函数默认是虚函数。

哪些函数不能被virtual修饰?

构造 static inline friend 类外的普通函数

inline

注:构造、析构函数可以是内联的,虚析构不能是内联。

friend

纯虚函数

operator重载操作符

自定义实现赋值重载操作符(如果不手动实现,编译期默认提供operator=函数,是浅拷贝)

1.浅拷贝

class A
{
private:int val;
public:A& operator = (const A& a){//判断异常,查看a是不是当前的对象if (this == &a)return *this;//浅拷贝情况this->val = a.val;return *this;}
};
int main() {A a1;A a2;a1 = a2;a1 = a1;
}

2.对于含有指针成员的情况,考虑深拷贝

class A
{
private:int* val;
public:A(){val = new int;}A& operator = (const A& a){//判断异常,查看a是不是当前的对象if (this == &a)return *this;//释放当前对象的旧内存(如果有)delete val;//为当前对象分配新的内存val = new int(*a.val);return *this;}~A(){delete val;}
};

访问权限

构造函数

在手写智能指针时用到了浅拷贝。 

拷贝构造

初始化列表

虚指针的初始化也是在初始化列表中完成。 

析构函数

类与类

类之间的关系

在我之前的文章:类之间的横向关系

多态

静态多态

是编译时确定的(具体执行什么函数),可以通过函数重载、函数模板实现。

动态多态

通过继承和虚函数实现。只有程序运行的时候,才能确定具体执行什么函数。

动态多态优缺点

优点:代码不变,功能可变,具有良好的拓展和复用性

缺点:

1.空间消耗,运行效率会相对低一些,破坏封装

2.虚函数多态没有办法调用子类特有的虚函数

重载、重写、隐藏

重载:相同作用域下,函数名相同,参数列表不同(个数或类型),返回值可同可不同。

重写(覆盖):指子类实现了和父类虚函数相同的函数,包括函数名,参数列表以及返回值。

隐藏:子类中包含父类中的同名函数(返回值、参数列表不做要求),用子类对象调用时,会调用子类中的同名函数。如果想调用父类的同名函数,需要加父类作用域。无法通过父类指针指向子类对象调用子类的同名函数。

虚指针与虚表

C++11

在我之前的文章:C++11知识点

设计原则

在我之前的文章:设计原则

设计模式

在我之前的文章:设计模式

STL

在我之前的文章:C++之STL

多继承

在我之前的文章:C++之多继承

虚继承

在我之前的文章:C++之虚继承

内部类

在我之前的文章:C++之内部类

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词