首页 > 编程语言 >c++的oop之class和struct

c++的oop之class和struct

时间:2024-02-27 23:14:55浏览次数:17  
标签:struct C# c++ oop 类型 class 构造函数

c++中的面向对象

构造函数

与C#一样,可以拥有多个构造函数,但python只有一个构造函数

默认的无参构造函数,可以这样写 classname() = default;

构造函数时初始化变量,建议这样写。对于const或自定义类型必须这样写,而对于内置类型几乎是一样的。

MyClass::MyClass(string name,int id):
	name(name),
	id_(id)
{
	Player::init();
}

C++中类的构造函数,成员变量是在初始化列表初始化还是在函数体中进行赋值? - 知乎 (zhihu.com)

函数的声明

成员函数的声明可以写在类的外面,只需要加上classname::xxx,而不像C#必须写在类的内部。

一般都是在h文件中声明,cpp中实现

类的生命周期

创建

拷贝

销毁 ~classname()

friend友元

friend class xxx ,在一个class的内部再定义一个class,或者单纯的定义单个class

friend友元,可以让外部访问private的字段和函数

关于class和stuct

在C#中这两者有差别挺大,主要是:C#中class是引用类型,而stuct是值类型,到c++中,只有访问类型的区别:stuct的属性全是public 而class可以有private,其它并无区别,从c++ primer看到。

经过实践,c++中如果实例化一个class,那么他仍然不是引用类型,只有指针是引用类型。


FAQ

Q:为什么很多代码中都是使用struct而不是class?

A:根据实际用途来决定

标签:struct,C#,c++,oop,类型,class,构造函数
From: https://www.cnblogs.com/zhaoqingqing/p/18035747

相关文章

  • C++多态
    /**多态/动态调用***1.虚函数/虚拟函数*语法:在函数前面加上virtual**1.1虚函数与虚继承没有关系,只是共用了关键字**2.重写/覆盖:虚函数且函数名字类型等完全一样*$注:虚函数是覆盖,不是虚函数才构成隐藏*$重写:指对函数体重写,函数体外的是直接使用父类的,......
  • C++继承
    //继承/***继承受权限影响*有publicprotectedprivate三种继承**基本语法:*classstudent:publicPerson*{**详细:跳转20inheritance--C++NO.23--3_27**///继承和组合/***组合即为在类成员是其他自定义类型:如适配器中栈,队列,反向迭代器.**继......
  • C++ STL 容器 forward_list类型
    C++STL容器forward_list类型介绍std::forward_list是C++标准模板库(STL)中的一个单向链表容器。与std::list不同,std::forward_list只允许从头部到尾部的单向迭代,不支持反向迭代。因此,std::forward_list在某些操作上可能比std::list更高效,尤其是在插入和删除元素时......
  • C++特殊类的设计与单例模式
    //1.设计一个不能被拷贝的类/*解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。C++98;将拷贝构造函数与赋值运算符重载只声明不定义,并且将其访问权限设置为私有即......
  • C++11的类型转换
    //C类型转换/*C语言:显式和隐式类型转换1.隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败2.显式类型转化:需要用户自己处理.隐式类型:界定:相关类型,相近类型,意义相似的类型可以发生类型转换,如整型和浮点可以发生类型转换,因为他们都表示数据的大......
  • 【现代C++】2.强化语言运行期的强化
    1.Lambda表达式lambda表达式实际提供了一个类似匿名函数的特性,匿名函数是在需要一个函数,但是又不想费力去命名一个函数的情况下使用的。1.1Lambda表达式基本语法[捕获列表](参数列表)mutable(可选)异常属性->返回类型{//函数体}捕获列表分为以下几种:1.1.1值捕......
  • C++11新特性的一些用法举例①
    //字符串字面量/*常用:1.原始字符串字面量---括号内保持原样输出---没有转义字符,如\n不再是换行,而是直接输出字面量\nR"(str)";实例:R"(aa\a"b"bb)";//print:aa\a"b"bb注意:constchar*s1=R"foo(HelloWorld)foo";打印结果:HelloWorld;----//&qu......
  • C++ STL 容器 list类型
    C++STL容器list类型list对于异常支持很好,要么成功,要么不会发生什么事情以下是std::list在异常处理方面表现良好的几个原因:动态内存管理:std::list使用动态内存分配来存储元素,这意味着它会在需要时自动分配内存,并在不再需要时释放内存。这种自动管理可以减少内存泄漏和悬......
  • C++ STL 容器-Deque
    C++STL容器-Dequestd::deque(双端队列)是C++标准模板库(STL)中的一个容器,它支持在序列的两端快速插入和删除元素。与std::vector和std::list等其他序列容器相比,std::deque在某些特定场景下具有独特的优势。元素的访问和迭代比vector慢,迭代器不是普通的指针。以下是std::deque的一......
  • 《黑暗欺骗》c++控制台 2D 版!Alpha 0.2.1
    现在只打了设置这些个东西,游戏主体还没打,那才是难点已实现功能游戏未实现设置有音量设置和键盘设置两个功能存档(这好像是最简单的功能吧?)注意事项!!!没错,如你所见,这个游戏我是使用了MCI来播放声音的!因此,你的DEV-C++需要链接到一个库打开工具->编译选项->编译器-......