首页 > 编程语言 >C++ Class

C++ Class

时间:2022-10-25 08:33:40浏览次数:41  
标签:std const cout C++ public using Class DBImpl

class与struct

为什么c++里面经常定义struct?

利用struct默认访问修饰符为public的特性,

属性

static成员

#include<iostream>

using std::cout;
using std::endl;

class A {
public:
    static long a;
    A() {
    }
};
long A::a = 233; //不初始化会报错

int main() {
    A aa;
    aa.a = 1;
    cout << aa.a << '\n';
    A bb;
    bb.a = 2;
    cout << aa.a << '\n';
}

继承

虚拟继承

在未加virtual时会出现这种情况
image

代码中需要指定调用哪个父类的方法,这样就很奇怪

image

而加了virtual后就不需要了

image

#include<iostream>

using std::cout;
using std::endl;

class Base {
protected:
    int value;
public:
    Base() {
        cout << "in Base" << endl;
    }
};

class DerivedA : virtual protected Base {
public:
    DerivedA() {
        cout << "in DerivedA" << endl;
    }
};

class DerivedB : virtual protected Base {
public:
    DerivedB() {
        cout << "in DerivedB" << endl;
    }
};

class MyClass : DerivedA, DerivedB {
public:
    MyClass() {
        cout << "in MyClass" << value << endl;
    }
};
int main() {
    MyClass myClass;

}

拷贝构造函数

就是一个构造函数,完了参数是同类型的对象,在使用等号赋值的时候会调用拷贝构造函数

#include<iostream>

using std::cout;
using std::endl;

struct A {
public:
    int a;
    A(int _a) {
        a = _a;
    }
    A(const A &obj) {
        cout << "调用拷贝构造函数" << '\n';
        a = obj.a + 1;
    }
};

int main() {
    A a1(233);
    A a2 = a1; //调用拷贝构造函数
    cout << a2.a;
}

技巧:禁止类copy

干掉copy 构造函数即可

class DBImpl : public DB {
 public:
  DBImpl(const DBOptions& options, const std::string& dbname,
         const bool seq_per_batch = false, const bool batch_per_txn = true,
         bool read_only = false);
  // No copying allowed
   DBImpl(const DBImpl&) = delete;
   void operator=(const DBImpl&) = delete;

标签:std,const,cout,C++,public,using,Class,DBImpl
From: https://www.cnblogs.com/attack204/p/16823718.html

相关文章

  • C++_函数指针/回调函数/std::function/std::bind
    类成员函数指针指向类中的非静态成员函数#include<iostream>#include<functional>#include<algorithm>#include<vector>usingnamespacestd;//函数指针指向一......
  • C++ 逻辑运算符
    //逻辑运算符inta=5;intb=20;if(a&&b){cout<<"Line1-条件为真"<<endl;}if(a||b......
  • C++ 关系运算符
    //关系运算符inta=21;intb=10;intc;if(a==b){cout<<"Line1-a等于b"<<endl;......
  • C++ 算术运算符号
    //算术运算符号inta=10;intb=2;intc=3;//+加法cout<<"a+b="<<a+b<<endl;//-减法cout<<"a-b=......
  • 实验3 数组、指针与现代C++标准库
    实验任务5:info.hpp:#include<iostream>#include<string>usingnamespacestd;classinfo{public:info(stringni,stringco,stringci,intn);voidpri......
  • 《Programming Abstractions in C++》总结目录
     1.C++基础 C++程序结构变量数据类型表达式语句 2.C++抽象函数库接口字符串类流类集合类类的设计 3.算法递归回溯排序时间复杂度 4......
  • c++执行期语义
    obejctconstructionanddestruction​ 一般而言,constructor和destructor的安插都如预期那样:{Pointpoint;//point.Point::Point()安插于此...//p......
  • C++ 模板LNK2019报错的问题
    在自定义类的头文件中使用了模板。在模板实例化时,编译器无法找到模板的实现。【法一】在使用了模板类或模板函数的文件中#include与放入了类定义的.h文件同名的.cpp......
  • C++算法之旅、01 入门篇
    使用胡凡主编的《算法笔记》教材。题目均为第三章题目。TEST//ProblemAddress#define_CRT_SECURE_NO_WARNINGS#include<cstdio>intmain(){return0;}PAT......
  • C语言入门-1-编译器的基本使用(Dev c++和visual studio)
    一、Devc++打开软件点击文件,新建,项目 选择Console点击helloworld,勾选c项目,名称自行输入点击确定后出现文件位置,自行安放在文件夹里保存后即可进行编译运......