栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++基础语法总结

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++基础语法总结

构造函数 默认构造函数
  • 如果类内部没有显式写出构造函数,编译器会自动生成一个默认构造函数。
初始化构造函数
  • explicit防止隐式调用,默认是implicit.
  • 在声明explicit base(int _data)以后调用a = 1,仍可以进行隐式转换,原因是base(double _data),编译器先把int转成double,再调用base(double _data)。
拷贝构造函数
  • 同样地,没有显式写出拷贝构造函数,编译器会自动生成一个。
#include 

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();
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429710.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号