C++ 类 & 对象 技术教程文章

C++ 类中会用到的关键字之-friend(virtual、override、friend、default、delete、final)【代码】

C++ 类中会用到的关键字之-friend(virtual、override、friend、default、delete、final) 接上篇文章,此篇内容主要梳理friend相关内容,如有不合理地方请大家及时联系,多谢! 3.friend(友元)c++中引入friend,引入目的如下:对于没有继承关系的类,如果有关联,或需要访问类内私有成员的情况下,使用友元较为方便; 友元破坏了类的封装性和隐藏性,使用时需格外小心;友元特性注意点 说明1 友元关系不能被继承2 友元关系是单向的...

C++基础学习-数据类型【代码】【图】

基本框架 #include <iostream> using namespace std;int main() {cout << "Hello World!\n"<<endl;system("pause");return 0; }C++的基础框架如上: 若有多个文件,有且仅有1个main函数,若有多个main函数 就会出错 变量的定义及输出: #include <iostream> using namespace std;int main() {int a = 10; cout << "a = " << a << endl;system("pause");return 0; }数据类型-整型#include <iostream> using namespace std;int main(...

双向循环链表模板类(C++)【图】

双向链表又称为双链表,使用双向链表的目的是为了解决在链表中访问直接前驱和后继的问题。其设置前驱后继指针的目的,就是为了节省其时间开销,也就是用空间换时间。 在双向链表的每个节点中应有两个链接指针作为它的数据成员:pred指向其前驱节点,next指向其后继节点。再加上数据域,因此每个双向链表至少包括三个域。 实现代码如下//header.h #include<iostream> using namespace std; /** 双向循环链表头文件,* 其声明中...

c++抽象类和纯虚函数【图】

源程序: #include <iostream>using namespace std;//shape类中有纯虚函数,所以shape类是抽象类,抽象类定义的对象//也是抽象的,只能用指针对象,不能用普通对象,更不能用普通对象实例化class shape{public: virtual double area()=0; //抽象类中至少有一个纯虚函数 virtual double area1() //虚函数必须要定义return 0; { return 0; }}; class square:public shape //派生类为正方形{protected: double H;public: square(d...

C++ Primer 5th笔记(chap 12)动态内存 allocator类【代码】

1. 标准库allocator类及其算法 算法说明allocator <.T> a定义了一个名为a的allocator对象,他可以为类型T的对象分配内存a.allocate(n)分配一段原始的、未构造的内存,保存n个类型为T的对象a.deallocate(n)释放从T*指针p中地址开始的内存,这块内存保存了n个类型为T的对象;p必须是一个先前由allocator返回的指针,且n必须是p创建时所要求的大小。调用dealocator之前,用户必须对每个在这块内存中创建的对象调用destroya.construct(...

# C++ 中的四种类型转换【代码】

C++ 中的四种类型转换 static_cast, dynamic_cast, const_cast, reinterpret_cast是c++ 中的四种类型转换 1、const_cast 用于将const变量转为非const 2、static_cast 用于各种隐式转换,比如非const转const,void*转指针等 static_cast能用于多态向上转化,如果向下转能成功但是不安全,结果未知; 进行上行转换(把派生类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动...

c++_语句块_cout和endl新的声明方法_将字符串的内容反转_逗号运算符_c风格类字符串的比较_string类字符串的比较_类型别名typedef和#define_do while 循环_c++

/* 语句块 用花括号括起来的语句 */#include <iostream>int main(){ using namespace std;   int x = 20;   {     int y = 100;     cout << x << endl; //ok     cout << y << endl; //ok   } //以上就是一个语句块,y变量定义在语句块里面,所以y只能在改语句块中使用,在语句块之外是不能使用的   cout << x << endl; //ok   //cout << y << endl; //invalid   return 0;} /*新变量就会隐...

005 C/C++ 数据类型_void

1.void的字面意思是无类型.void * 是无类型指针,void * 可以指向任何类型的数据. 2.数据类型的分装: int InitHardEnv(void ** handle);典型的内存操作函数: void * memcpy( void *dest, const void *src, size_t len );void * memset( void *buffer, int c, size_t num ); 3. void修饰函数的返回值和参数时 表示没有返回值和参数. void function(void); 4. void指针:C语言中只有相同类型的指针才可以互相赋值.void * 作为左值,可以...

C++动态内存和类【代码】

C++动态内存和类 一、使用 C++使用new和delete运算符来动态控制内存。 先上一段示例代码分析: 二、示例代码 // StringBad.h class StringBad{ private:char* str;int len;static int num_strings; public:StringBad();StringBad(const char* s);~StringBad();// friend function 友元函数friend std::ostream& operator<<(std::ostream& os, const StringBad& st);};// StringBad.cpp // 初始化静态类成员变量, 不能在类声明中初始...

primer_C++_3.3 标准库类型vector【图】

/* * 用cin读入一组整数并把他们存入一个vector对象 */#include <iostream> #include <vector>using namespace std; int main() { cout << "输入一组整数:";int v2;vector<int> v1; //创建vector对象 // for (int t=0;t!=100;++t) // v1.push_back(t);while (cin >> v2) {v1.push_back(v2); //把v2添加到v1后面}cout << "输出vector:";for(auto c:v1)cout << c;return 0; } #include <iostream> #include <string> #include <v...

C++--模板的概念和意义、深入理解函数模板、类模板的概念和意义【代码】【图】

一.模板的概念与意义 Q:C++中有几种交换变量的方法?定义宏代码与定义函数A.定义宏代码优点:代码复用,适合所有的类型缺点:编译器不知道宏的存在,缺少类型检查B.定义函数优点:真正的函数调用,编译器对类型进行检查缺点:根据类型重复定义函数,无法代码复用 C.泛型编程--不考虑具体数据类型的编程方式Swap泛型写法中的T不是一个具体的数据类型,而是泛指任意的数据类型C++中的泛型编程函数模板--一种特殊的函数可用不同类型进行...

C++_类继承1-从一个简单的类开始

面向对象编程的主要目的之一是:提供可重用的代码。尤其是项目很庞大的时候,重用测试过的代码比重新编码代码要好得多。 C++提供了更高层次的重用性。其中之一就是继承这个概念。 一些厂商提供了类库。类库由类声明和实现构成。类库通常是由源代码组成的,这意味着可以对其进行修改,以满足需求。但是也可以用类继承的方式,来扩展和修改类。这比修改代码的方法更好。正如继承一笔财产要比自己白手起家更容易。 ...

C/C++:类初始化

初始化列表: 列表初始化顺序与变量声明顺序一致,与列表顺序无关。 必须用初始化列表的情况: 1?const和reference类型成员变量{\red{1-const 和 reference 类型成员变量}}1?const和reference类型成员变量 2?基类构造函数{\red{2-基类构造函数}}2?基类构造函数

C++ 纯虚函数和抽象类【代码】

纯虚函数和定义 ? 在许多情况下,在基类中不能对虚函数给出有意义有实现,而把它说明为纯虚函数。纯虚函数是没有函数体的虚函数,它的实现留给该基类的派生类去做,这就是纯虚函数的作用。 ?class A { private:int a; public:virtual void Print( ) = 0 ; //纯虚函数void fun( ){cout << "fun";} };纯虚函数的标志是:在其声明后有一个特殊的语法 =0. 抽象类带有纯虚函数的类称为抽象类。抽象类是一种特殊的类,它是为了抽象和...

[C/C++] 1012 数字分类 (20 分)【代码】

[C/C++] 1012 数字分类 (20 分) 给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:A1 = 能被 5 整除的数字中所有偶数的和; A2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算n1?n?2+n?3?n?4?? ?; A3 = 被 5 除后余 2 的数字的个数; A4 = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位; A5 = 被 5 除后余 4 的数字中最大数字。输入格式: 每个输入包含 1 个测试用例。每个测试用例先给出一个不...

C++中的数据类型、运算符和表达式【代码】【图】

C语言中的数据类型能分为四种:基本数据类型、构造数据类型、指针数据类型和空类型。 1、基本数据类型基本数据类型可以分为三种:整型、字符型、浮点型 整形:短整型、基本整型、长整型、长长整型。一般情况下在不同的编译器中相同的数据类型占用的字节数也不同。一下介绍在CodeBlock编译器中的统计。类型名称    字节数short[int]    2int       4long[int]     4long long[int] 8在C++中提供了可以计算...

c++ primer 第十四章重载运算与类型转换

c++ primer 第十四章重载运算与类型转换14.1 基本概念14.2 输入和输出运算符14.2.1 重载输出运算符<<14.2.2 重载输入运算符>>14.3 算术和关系运算符14.3.1 相等运算符14.3.2 关系运算符14.4 赋值运算符14.5 下标运算符14.6 递增和递减运算符14.7 成员访问运算符14.8 函数调用运算符14.8.1 lambda是函数对象14.8.2 标准库定义的函数对象14.8.3 可调用对象与function14.9 重载、类型转换与运算符14.9.1 类型转换运算符14.9.2 避免有二...

第二章:C++泛型机制的基石:数据类型表——《C++泛型:STL原理和应用》读书笔记整理

第二章:C++泛型机制的基石——数据类型表 2.1 类模板的公有数据类型成员 2.1.1 类的数据类型成员 ??C++类中不仅可以定义数据成员和函数成员,而且还可以定义数据类型成员。在泛型设计中,类的数据类型成员是一个常用的感念。所谓类的数据类型成员,就是在一个类中使用typedef定义一个已知数据类型的别名。例如: typedef long double LDBL ??在C++中,这种在类模板中定义的数据类型也称nested type(嵌入式类型)。既然nested ty...

C++——类模板几种常见的情况【代码】【图】

类模板几种常见的情况 类模板的定义我在上一篇博客模板小结中已经介绍过,大家还不懂的可以去看下。 1 #include<iostream>2 using namespace std;3 template<class T1,class T2> //模板类4 class Person5 {6 public:7 Person(T1 age,T2 name)8 {9 this->age = age; 10 this->name = name; 11 } 12 void show_infor() //用来访问模板类的私有变量,输出变量信息 13 { 14 ...

C++ 高级数据类型(四)—— 动态内存分配【图】

到目前为止,我们的程序中我们只用了声明变量、数组和其他对象(objects)所必需的内存空间,这些内存空间的大小都在程序执行之前就已经确定了。但如果我们需要内存大小为一个变量,其数值只有在程序运行时 (runtime)才能确定,例如有些情况下我们需要根据用户输入来决定必需的内存空间,那么我们该怎么办呢? 答案是动态内存分配(dynamic memory),为此C++ 集成了操作符new 和delete。 操作符 new 和 delete 是C++执行指令。本...