C++三大特性

简介: C++作为一种强大的面向对象的语言,其语法的复杂性可谓最高,相比于Java有自动内存回收机制,C++里对于堆上的资源需要手动进行管理,但是随着C++智能指针的出现成功的解决了这一问题,但是也正是这样也早就了C++那么难学,但是C++的也有一个很大的优点就是效率极高,所以灵活应用C++提供的新特性将有利于我们的开发效率和程序的运行效率,本文将从C++最基本的三大特性开始介绍C++这门功能强大但又极其复杂的语言。

1.封装性

封装性是指外界无法访问我私有的或保护的成员,一般我们将成员变量设成私有,让外界无法知道我的细节。为了让子类能继承,我们也可以将成员设置成保护。


2.继承性

子类继承父类公有的或保护的成员。对于继承方式引起访问权限的变化,下面给出一张表格。


image.png


总结几个特点:


      (1)默认继承方式为private


       (2)private修饰的成员无法被继承


       (3)要想不被外界访问又想被子类继承,可以将访问权限设置成protected


       (4)访问权限大小排名:public > protected > private


3.多态性

多态分为静态多态和动态多态,其中静态多态分为重载跟函数模板,动态多态指的是重写。


(1)静态多态(编译期)


       重载:同一个作用域下,函数名相同,参数不同的这样一组函数我们称他们构成一组重载函数。


       函数模板:根据你提供参数的不同,在运行期生成不同的函数。


(2)动态多态(运行期)


       父类实现的纯虚函数,子类对其实现,父类指针/引用指向/引用子类对象,指针/引用调用重写的方法。


下面我们通过一段简单的代码加深对上述概念的理解。


#include

using namespace std;

class Father

{

public:

virtual void show() // 多态性

{

 cout << "Father::show" << endl;

}

private:

int f = 1;// 封装性

};

class Child : public Father // 继承性

{

public:

void show()

{

 cout << "Child::show" << endl;

}

private:

int c = 2;

};

void show(int a)

{

cout << "调用全局有参数的show" << endl;

}

void show()

{

cout << "调用全局无参数的show" << endl;

}

int main(void)

{

Child child;

Father& f = child;

f.show(); // 调用的是子类的show

show(5); // 调用的是有参数的show

show(); //调用的是无参数的show

return 0;

}

在C++11后,多态一般都指的是动态多态。

相关文章
|
1月前
|
编译器 程序员 定位技术
C++ 20新特性之Concepts
在C++ 20之前,我们在编写泛型代码时,模板参数的约束往往通过复杂的SFINAE(Substitution Failure Is Not An Error)策略或繁琐的Traits类来实现。这不仅难以阅读,也非常容易出错,导致很多程序员在提及泛型编程时,总是心有余悸、脊背发凉。 在没有引入Concepts之前,我们只能依靠经验和技巧来解读编译器给出的错误信息,很容易陷入“类型迷路”。这就好比在没有GPS导航的年代,我们依靠复杂的地图和模糊的方向指示去一个陌生的地点,很容易迷路。而Concepts的引入,就像是给C++的模板系统安装了一个GPS导航仪
103 59
|
1月前
|
存储 编译器 C++
【C++】面向对象编程的三大特性:深入解析多态机制(三)
【C++】面向对象编程的三大特性:深入解析多态机制
|
1月前
|
存储 编译器 C++
【C++】面向对象编程的三大特性:深入解析多态机制(二)
【C++】面向对象编程的三大特性:深入解析多态机制
|
1月前
|
编译器 C++
【C++】面向对象编程的三大特性:深入解析多态机制(一)
【C++】面向对象编程的三大特性:深入解析多态机制
|
1月前
|
存储 安全 编译器
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(一)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
26天前
|
C++
C++ 20新特性之结构化绑定
在C++ 20出现之前,当我们需要访问一个结构体或类的多个成员时,通常使用.或->操作符。对于复杂的数据结构,这种访问方式往往会显得冗长,也难以理解。C++ 20中引入的结构化绑定允许我们直接从一个聚合类型(比如:tuple、struct、class等)中提取出多个成员,并为它们分别命名。这一特性大大简化了对复杂数据结构的访问方式,使代码更加清晰、易读。
32 0
|
2月前
|
编译器 C++ 计算机视觉
C++ 11新特性之完美转发
C++ 11新特性之完美转发
49 4
|
2月前
|
Java C# C++
C++ 11新特性之语法甜点1
C++ 11新特性之语法甜点1
31 4
|
2月前
|
安全 程序员 编译器
C++ 11新特性之auto和decltype
C++ 11新特性之auto和decltype
38 3
|
2月前
|
设计模式 缓存 安全
C++ 11新特性之week_ptr
C++ 11新特性之week_ptr
35 2