首页 > 编程语言 >条款05: 了解c++默默编写并调用哪些函数

条款05: 了解c++默默编写并调用哪些函数

时间:2024-09-07 22:03:03浏览次数:8  
标签:std 调用 const 05 nameValue c++ 默认 Empty 构造函数

1. 如果没有声明任何构造函数,编译器会为你声明一个default构造函数
2. 惟有default构造函数被需要,才会被编译器创建出来

class Empty
{
public:
    Empty() {}//1. 默认构造
    ~Empty() {} //2. 析构函数
    Empty(const Empty& rhs) {} //3. copy构造
    Empty& operator=(const Empty& rhs) {} //4. copy赋值
};

1. 声明了构造函数,编译器于是不再为它创建default构造函数
2. 内置类型默认拷贝构造,每个成员变量对应初始化
3. 内置类型默认拷贝赋值基本于默认拷贝构造一致
4. 对于成员变量为引用类型或const类型,拒绝生成默认拷贝构造和赋值

template<typename T>
class NameObject
{
public:
    NameObject():
        nameValue(),objectValue()
    {}
    NameObject(const std::string& name, const T& value) :
        nameValue(name), objectValue(value)
    {}
    const std::string& NameValue()const
    {
        return nameValue;
    }
private:
    //std::string& nameValue; //拒绝生成
    //const std::string nameValue; //拒绝生成
    std::string nameValue;
    T objectValue;

};

void Test00()
{
    NameObject<int> no1("Smallest Prime Number", 2);
    NameObject<int> no2(no1); //调用默认拷贝构造
    std::cout << no2.NameValue() << std::endl;
    NameObject<int> no3;
    no3 = no1; //调用默认拷贝赋值
    std::cout << no3.NameValue() << std::endl;
}

 

标签:std,调用,const,05,nameValue,c++,默认,Empty,构造函数
From: https://www.cnblogs.com/BoYuCG/p/18402227

相关文章

  • 《深入探究 <侠盗猎车手 5>(GTA5)的 C++ 代码世界》
    在游戏的浩瀚宇宙中,《侠盗猎车手5》(GrandTheftAutoV,简称GTA5)无疑是一颗璀璨的巨星。这款游戏以其庞大的开放世界、精彩的剧情和令人惊叹的游戏玩法,吸引了全球无数玩家。而在其背后,C++代码起着至关重要的作用。一、游戏引擎的C++魔法GTA5采用了Rockstar自研的强......
  • 用户空间的系统调用是如何链接到内核空间的系统调用的——MIT6.S081学习记录
    用户态调用了sysinfo()后,系统会从user/user.h里找到相关声明。用户空间的系统调用函数(如sysinfo())是通过链接到usys.S中的汇编代码来实现的。usys.S文件定义了所有系统调用的入口点,这些入口点使用.global指令使函数名在链接时可见。当用户程序中调用sysinfo()时,链接器会......
  • Objective-C 动态调用秘籍:NSInvocation 的魔法
    标题:Objective-C动态调用秘籍:NSInvocation的魔法在Objective-C编程中,NSInvocation是一个强大的工具,它允许你在运行时动态地调用方法。这种能力对于实现诸如方法拦截、依赖注入、或者在不知道方法签名的情况下调用方法等高级功能至关重要。本文将深入探索NSInvocation的使用方法,并......
  • 东方博宜oj题解1161-1165(c++)
    各位读者们,抱歉,因为最近的时间原因,所以更新频率比较低。1161:1161-元素插入有序数组-东方博宜OJ#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn,s,c; cin>>c>>n; inta[n];//定义数组 for(inti=0;i<n;i++){ cin>>a[i]; } s=n;//设c是最大的......
  • C++小游戏集3个(不定时更新)2
    前言在Dvec++中想做游戏是很难的,但我不这么想,在下写了一些小游戏给客官看看废话不多说,上代码!!!一、表白神器表白很好用(真的)#include<stdio.h>#include<math.h>#include<windows.h>#include<stdio.h>#include<math.h>#include<stdlib.h>#include<string.h>int......
  • [c++][笔记]浅谈几种排序方式---冒泡排序,选择排序,桶排序
     一、algorithm里的sort函数 #include<cstdio>//数据小的可以用iostream#include<algorithm>//不能忘记算法库,否则会编译失败。usingnamespacestd;intmain(){intn;scanf("%d",&n);inta[n+5]={};for(inti=1;i<=n;i++){......
  • C++ 模板基础知识——可变参数模板
    目录C++模板基础知识——可变参数模板1.可变参函数模板1.1基本含义1.2利用constexprif优化递归函数1.3关于constexprif的进一步理解1.4重载2.折叠表达式2.1一元左折(UnaryLeftFold)2.2一元右折(UnaryRightFold)2.3二元左折(BinaryLeftFold)2.4二元右折......
  • C++对象模型
    C++对象模型在C++面向对象的类中,有两种数据成员和三种成员函数:classBase{public:Base(inti):baseI(i){};intgetI(){returnbaseI;}staticvoidcountI(){};virtualvoidprint(void){cout<<"Base::print()";}virtual~Base(){}privat......
  • C++继承基础
    虚函数默认实参C++默认实参是靠编译器实现的,因此默认实参不参与动态绑定,默认实参有静态类型决定。访问控制每个类分别控制自己的成员初始化过程,还分别控制其成员对于派生类来说是否可访问,友元不继承。成员:protected:派生类可见、自己、friend可见public:所有可见private:自己......
  • 【C++算法全真练习题】迷宫问题
    目录题目描述思路AC解答题目描述‌题目描述‌:‌给定一个二维迷宫,‌其中 0 表示可以走的路,‌1 表示障碍物。‌起点坐标为 (0,0),‌终点坐标为 (m-1,n-1),‌其中 m 和 n 分别是迷宫的行数和列数。‌你需要使用广度优先搜索(‌BFS)‌找到从起点到终点的一条路径......