C/C++教程

C++基础语法总结

本文主要是介绍C++基础语法总结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

构造函数

默认构造函数

  • 如果类内部没有显式写出构造函数,编译器会自动生成一个默认构造函数。

初始化构造函数

  • explicit防止隐式调用,默认是implicit.
  • 在声明explicit Base(int _data)以后调用a = 1,仍可以进行隐式转换,原因是Base(double _data),编译器先把int转成double,再调用Base(double _data)。

拷贝构造函数

  • 同样地,没有显式写出拷贝构造函数,编译器会自动生成一个。
#include <iostream>

class Base {
public:
  // 默认构造函数
  Base() = default;

  // 初始化构造函数
  // explicit防止隐式调用
  explicit Base(int _data) : data(_data) {}
  Base(double _data) : data1(_data) {}

  // 拷贝构造函数
  Base(const Base &b) : data(b.data), data1(b.data1) {
    std::cout << "调用复制构造函数!" << std::endl;
  }

  void print() const {
    std::cout << data << " " << data1 << std::endl;
  }

  ~Base() {
    std::cout << "调用析构函数!" << std::endl;
  }

private:
  int data{};
  double data1{};
};

int main() {
  Base a(1.0);         // 栈变量
  Base *b = new Base();// 堆指针
  b->print();
  std::cout << "=========" << std::endl;
  a.print();
  a = 2.0;  // 隐式转换,调用Base(double)构造函数
  a.print();// 输出0 2
  a = 1;    // 仍然可以隐式转换,explicit可以避免单参数构造函数隐式调用
  a.print();// 输出0 1
  std::cout << "=========" << std::endl;
  b = new Base(a);// 调用复制构造函数
  b->print();
}
这篇关于C++基础语法总结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!