Qt专栏之C++预习篇(二)

Qt专栏之C++预习篇(二)

    • C++的秘密
      • 1.继承时的重名遮蔽
      • 2.cin cout为内置对象
      • 3.内联函数inline
    • 知识速记
      • 扩展概念速记点

用Qt写上位机软件真的超级方便,小小编在这边分享一些如何从零开始通过Qt来制作上位机软件。

我们预习回顾下Qt使用的编程语言,本文旨在阐述C++的设计规范以及补充速记点

C++的秘密

1.继承时的重名遮蔽

​ 基类成员和派生类成员的名字一样时会造成遮蔽,对于成员函数要引起注意,不管函数的参数如何,只要名字一样就会造成遮蔽。也就是说基类成员函数和派生类成员函数不会构成重载,如果派生类有同名函数,那么就会遮蔽基类中的所有同名函数,不管它们的参数是否一样。举例如下:

//基类Base
class Base_class{
     
public:
    void func();
    void func(bool);
};
void Base::func(){
      cout<<"Base::func()"<<endl; }
void Derived::func(bool is){
      cout<<"Derived::func(bool)"<<endl; }

//派生类Derived
class Derived_class: public Base_class{
     
public:
    void func(int);
    void func(char *);
};
void Base::func(int a){
      cout<<"Base::func(int)"<<endl; }
void Derived::func(char *str){
      cout<<"Derived::func(char *)"<<endl; }

int main(){
     
    Derived d;
    d.func(8);
    d.func("设计至纯");
    d.func();  //此处报错,基类func被派生类同名函数所遮蔽
    d.func(true);  //不构成重载函数
    d.Base_class::func(); // 可通过基类以及域解析符访问到基类的成员函数
    d.Base_class::func(true);
    return 0;
}

2.cin cout为内置对象

​ cout 和 cin 都是 C++ 的内置对象,而不是关键字。C++ 库定义了大量的类(Class),程序员可以使用它们来创建对象,cout 和 cin 就分别是 ostream 和 istream 类的对象,只不过它们是由标准库的开发者提前创建好的,可以直接拿来使用。这种在 C++ 中提前创建好的对象称为内置对象。

​ 使用 cout 进行输出时需要紧跟<<运算符,使用 cin 进行输入时需要紧跟>>运算符,这两个运算符可以自行分析所处理的数据类型,因此无需像使用 scanf 和 printf 那样给出格式控制字符串。

3.内联函数inline

​ 函数调用是有时间和空间开销的。程序在执行一个函数之前需要做一些准备工作,要将实参、局部变量、返回地址以及若干寄存器都压入栈中,然后才能执行函数体中的代码;函数体中的代码执行完毕后还要清理现场,将之前压入栈中的数据都出栈,才能接着执行函数调用位置以后的代码。

​ 如果函数体代码比较多,需要较长的执行时间,那么函数调用机制占用的时间可以忽略;如果函数只有一两条语句,那么大部分的时间都会花费在函数调用机制上,这种时间开销就就不容忽视。此时就可以将那些短小的、频繁调用的函数声明为内联函数inline

​ 并且内联函数可以可直接定义在头文件中,可用作用来替换的带参数的宏。

类体内部定义的函数默认就是内联函数。由于内联适合短小的函数,一般来说类中函数基本都正常不短,因此建议养成良好的代码习惯,

知识速记

扩展概念速记点

  • C++提供的new 和delete是实现动态分配存储空间的运算符

  • 函数参数缺省:函数在定义时可以预先给定一个缺省的形参值。当函数调用时,如果给出实参,则将实参值传给形参。如果没有给出实参,则形参采用预先给定的缺省值

  • 函数重载:一组参数类型不同或参数个数不同的函数共用同一个函数名,通常在需要实现类似功能时使用

  • 模板template(函数模板和类模板):定义一个通用的函数/类,可对不同类型的数据进行相同的处理,有利于代码重用,函数/类模板本质上还是重载函数

  • 作用域运算符"::"

  • 构造函数:类中特殊的成员函数,用于在创建对象时(系统自动调用),使用给定的值来初始化对象的数据成员(派生类构造函数的调用顺序:先调用基类构造函数、在调用子对象构造函数(若有)、最后调用派生类构造函数)

  • 析构函数:类中特殊的成员函数,用来释放对象,在程序结束或使用该对象的函数结束前,会被系统自动调用(派生类析构函数的调用顺序:整个程序结束时,被系统自动调用,先执行派生类析构函数,再执行基类的析构函数)

  • 常对象和成员:C++主张将所有无须修改当前对象的成员函数声明为const成员函数,只有常成员函数可以操作常对象

  • 静态成员static:类中每个对象都有其所有数据成员的副本,为了解决数据共享问题,引入静态成员,在类中,分为静态数据成员和静态成员函数

  • 成员对象和封闭类:称一个类的成员变量是另一个类的对象为成员对象,包含成员对象的类叫封闭类

  • 友元函数:非成员函数访问类的私有成员的方法

    • 友元的关系是单向的而不是双向的
    • 友元的关系不能传递

关注微信公众号『设计至纯』,查看更多原创内容,和小小编进行灵魂交流O(∩_∩)O欢迎疯狂点赞、分享、收藏、点赞、在看、点赞。 ^ o ^
Qt专栏之C++预习篇(二)_第1张图片

你可能感兴趣的:(Qt,qt)