Minecraft(我的世界)中文论坛

标题: [搬运+翻译][从零学编程]C++Ⅵ:再谈类

作者: 45gfg9    时间: 2020-3-28 16:45
标题: [搬运+翻译][从零学编程]C++Ⅵ:再谈类
本帖最后由 45gfg9 于 2020-8-31 17:01 编辑



索引贴
答案帖


Prev: C++Ⅴ:类与对象
Next: C++Ⅶ:继承 & 多态




1 为类创建单独文件

1.1 创建新类



1.2 源文件 & 头文件(一)



1.3 作用域解析运算符



1.4 源文件 & 头文件(二)




2 析构函数

2.1 析构函数(一)



2.2 析构函数(二)



2.3 析构函数(三)



2.4 析构函数(四)



2.5 析构函数(五)



2.6 析构函数(六)




3 箭头成员运算符

3.1 #ifndef & #define



3.2 成员函数



3.3 点运算符



3.4 指针(四)



3.5 箭头成员运算符




4 常量对象

4.1 常量



4.2 常量对象(一)



4.3 常量对象(二)



4.4 常量对象(三)




5 成员初始化

5.1 成员初始化(一)



5.2 成员初始化(二)



5.3 成员初始化(三)



5.4 成员初始化(四)




6 组合(第一部分)

6.1 组合(一)



6.2 组合(二)



6.3 组合(三)




7 组合(第二部分)

7.1 组合(四)



7.2 组合(五)



7.3 组合(六)




8 friend关键字

8.1 友元函数(一)



8.2 友元函数(二)



8.3 友元函数(三)




9 this关键字

9.1 this(一)



9.2 this(二)



9.3 this(三)



9.4 this(四)




10 运算符重载

10.1 运算符重载(一)




10.2 运算符重载(二)



10.3 运算符重载(三)



10.4 运算符重载(四)



本章测试




作者: langyo    时间: 2020-3-28 16:48


还以为你这个是索引

没想到是零散的东西

以及你可以细致讲一讲五三法则
作者: langyo    时间: 2020-3-28 16:51
本帖最后由 langyo 于 2020-3-28 16:52 编辑

仔细看了下,你还缺了一堆东西

- =default 和 =delete 去哪里了?
- 拷贝构造函数需要更细致的讲解,配合五三讲比较好……
- 模板类有考虑讲不?
- 友元 operator 何时入手?
作者: 45gfg9    时间: 2020-3-28 16:58
langyo 发表于 2020-3-28 16:51
仔细看了下,你还缺了一堆东西

- =default 和 =delete 去哪里了?

1. 2. 原文没有 我溜了
我觉得=default和=delete是进阶特性了awa
而且是C++11加的 而这篇教程大概还在用C++98(那咋办嘛)

3. 有(在C++Ⅷ了,不知道什么时候更新233)

4. 友元operator没得 以读者的水平应该可以自己写(逃)
作者: ⚡️👮    时间: 2020-3-28 17:39
百万贴大佬
作者: 天空的大楼    时间: 2020-3-28 17:44
这个帖子值得纪念,是一个有意义的教程帖子。
作者: Hueihuea    时间: 2020-3-28 18:12
本帖最后由 Hueihuea 于 2020-3-28 22:53 编辑

咦 TID100W拍照留念

咦 挨卡了XD
作者: 屑弟弟楚儿    时间: 2020-3-28 19:28
大草
(本来以为至少是在茶馆出现的  教学贴爆冷门)
(反手给我打了一个大嘴巴子)
作者: 1784234383    时间: 2020-3-28 22:52
本帖最后由 1784234383 于 2020-3-30 16:19 编辑

还带章末测试 lz有心了

作者: FireworkPolymer    时间: 2020-3-29 07:40
虽然没看懂,但是C++在java版我的世界中有什么用吗(基岩版倒是C++开发的)
作者: BiggayJN    时间: 2020-3-29 09:15
淦,百万帖不发锭不过这也是个不错的教程
作者: 45gfg9    时间: 2020-3-29 09:15
FireworkDLC 发表于 2020-3-29 07:40
虽然没看懂,但是C++在java版我的世界中有什么用吗(基岩版倒是C++开发的)

一般来说没有(捂脸)

这个系列与Minecraft无关,就是纯粹的编程入门
作者: FireworkPolymer    时间: 2020-3-29 09:19
45gfg9 发表于 2020-3-29 09:15
一般来说没有(捂脸)

这个系列与Minecraft无关,就是纯粹的编程入门

所以“我的世界”中文论坛为什么要开这个板块
作者: Salt_lovely    时间: 2020-3-29 11:15
话说C++会不会有一天可以用于Java版的插件开发?(好像不太可能,跨平台就要重新编译了吧)
作者: 洞穴夜莺    时间: 2020-3-29 11:50
FireworkDLC 发表于 2020-3-29 07:40
虽然没看懂,但是C++在java版我的世界中有什么用吗(基岩版倒是C++开发的)

有用,写启动器
作者: FloatingBlocks    时间: 2020-3-29 15:56
这个
只学到函数的我瑟瑟发抖

感觉我那本书太详细了堪比手册

这个知识密度太高了,改天当手册用吧

支持lz(还是百万帖子恭喜了
作者: 冷枫小乐    时间: 2020-3-30 01:47
恭喜成为100w贴,雾,好评
作者: 88453877    时间: 2020-3-30 13:34
我就是来水个帖子的
作者: 剑眉狼    时间: 2020-3-30 14:15
百万贴,恭喜恭喜
纯干货嗷,先收藏为敬了
作者: 丶追忆    时间: 2020-3-30 16:49
哇。没抢到锭,真难受
作者: nidb    时间: 2020-3-30 16:54
C艹乃秃头源泉
作者: 遗忘的流髑    时间: 2020-3-30 18:54
百万帖恭喜!
作者: 一只小水怪    时间: 2020-4-1 17:51
100w贴!!!
作者: AzureZeng    时间: 2020-4-3 13:50
就是你抢了TID1000000? 原来是存草稿了,我们还以为被删了
作者: hjxhjx2    时间: 2020-4-4 14:54
本帖最后由 hjxhjx2 于 2020-4-4 14:55 编辑

谔谔C++OIer表示我不管这块
我只会算法QAQ(红黑树什么的)
只有2,4,5,8,9,10部分是我熟悉的。。。
(关于class。。。struct不香吗。。。class在OI中很废的...)
话说friend是不是可以用const代替来着啊。。。。
lz不打算另外出个帖子讲一下吗
作者: 馄饨=w=    时间: 2020-4-5 22:32
dalao,百万,考古

[编辑于2080-1-1:]一亿前来考古
作者: 45gfg9    时间: 2020-4-5 23:01
hjxhjx2 发表于 2020-4-4 14:54
谔谔C++OIer表示我不管这块
我只会算法QAQ(红黑树什么的)
只有2,4,5,8,9,10部分是我熟悉的。。。

算法我完全痴呆(

friend和const是完全不同的两个东西啊

以及如果有需要的话 可能未来(大概)会开一个答疑帖吧
作者: hjxhjx2    时间: 2020-4-6 10:06
45gfg9 发表于 2020-4-5 23:01
算法我完全痴呆(

friend和const是完全不同的两个东西啊

但是我用STL重载运算符时似乎必须要加个friend或者const(??)
(好吧我对于一些语法并不了解。。。)
作者: 屈子墨    时间: 2020-4-6 12:41
看完这个后 我竟不知道是先学java还是c++了
作者: 池恩TwT    时间: 2020-5-21 12:01
1000000 留念
作者: 小凡Eric    时间: 2020-6-7 11:24
百万考古留恋
作者: Garyjel    时间: 2020-7-26 21:48
自编2048
#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
using namespace std;
long long a[1001][1001],s,h,n,pl;
int ct(int i,int j)
{
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),8);
        cout<<"║ ";
        if(a[i][j]==0) cout<<"  ";
        if(a[i][j]==1)
        {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN | FOREGROUND_BLUE);
                cout<<"□";
        }
        if(a[i][j]==2)
        {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),3);
                cout<<"□";
        }
        if(a[i][j]==4)
        {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
                cout<<"□";
        }
        if(a[i][j]==8)
        {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |FOREGROUND_BLUE);
                cout<<"□";
        }
        if(a[i][j]==16)
        {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN);
                cout<<"□";
        }
        if(a[i][j]==32)
        {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
                cout<<"■";
        }
        if(a[i][j]==64)
        {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),3);
                cout<<"■";
        }
        if(a[i][j]==128)
        {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
                cout<<"■";
        }
        if(a[i][j]==256)
        {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |FOREGROUND_BLUE);
                cout<<"■";
        }
        if(a[i][j]==512)
        {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN);
                cout<<"■";
        }
        if(a[i][j]==1024)
        {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
                cout<<"○";
        }
        if(a[i][j]==2048)
        {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
                cout<<"◎";
        }
}
int f(int x)
{
        if(x==119)//up
        {
                for(int j=1;j<=n;j++)
                        for(int i=1;i<=n;i++)
                        {
                                int xl=i;
                                while(a[xl-1][j]==0&&xl>1)
                                {
                                        a[xl-1][j]=a[xl][j];
                                        a[xl][j]=0;
                                        xl--;
                                }
                                if(a[xl-1][j]==a[xl][j])
                                {
                                        a[xl][j]=0;
                                        a[xl-1][j]*=2;
                                }
                        }
        }
        if(x==115)//down
        {
                for(int j=1;j<=n;j++)
                        for(int i=n;i>=1;i--)
                        {
                                int xl=i;
                                while(a[xl+1][j]==0&&xl<n)
                                {
                                        a[xl+1][j]=a[xl][j];
                                        a[xl][j]=0;
                                        xl++;
                                }
                                if(a[xl+1][j]==a[xl][j])
                                {
                                        a[xl][j]=0;
                                        a[xl+1][j]*=2;
                                }
                        }
        }
        if(x==97)//left zuo
        {
                for(int i=1;i<=n;i++)
                        for(int j=1;j<=n;j++)
                        {
                                int yl=j;
                                while(a[i][yl-1]==0&&yl>1)
                                {
                                        a[i][yl-1]=a[i][yl];
                                        a[i][yl]=0;
                                        yl--;
                                }
                                if(a[i][yl-1]==a[i][yl])
                                {
                                        a[i][yl]=0;
                                        a[i][yl-1]*=2;
                                }
                        }
        }
        if(x==100)//right you
        {
                for(int i=1;i<=n;i++)
                        for(int j=n;j>=1;j--)
                        {
                                int yl=j;
                                while(a[i][yl+1]==0&&yl<n)
                                {
                                        a[i][yl+1]=a[i][yl];
                                        a[i][yl]=0;
                                        yl++;
                                }
                                if(a[i][yl+1]==a[i][yl])
                                {
                                        a[i][yl]=0;
                                        a[i][yl+1]*=2;
                                }
                        }
        }
}
int main()
{
        n=4;
        while(s<n*n)
        {
                s=0; h=0;
                int xl,s1=0,zl=1;
                for(int i=1;i<=n;i++)
                        for(int j=1;j<=n;j++)
                                if(!a[i][j]) s1++;
                                else h+=a[i][j];
                if(s1==0)
                {
                        cout<<"GAME OVER --------"<<h;
                        return 0;
                }
                srand(time(0));
                xl=rand();
                zl=rand();
                zl%=2; xl%=s1;
                zl++; xl++;
                for(int i=1;i<=n;i++)
                        if(xl)
                        {
                                for(int j=1;j<=n;j++)
                                        if(!a[i][j])
                                        {
                                                if(xl==1)
                                                {
                                                        a[i][j]=zl;
                                                }
                                                xl--;
                                        }
                        }
                        else break;
                system("cls");
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),8);
                cout<<"╔";
                for(int i=1;i<=n-1;i++) cout<<" ═ ╦";
                cout<<" ═ ╗"<<endl;
                for(int i=1;i<=n-1;i++)
                {
                        for(int j=1;j<=n;j++)
                        {
                                ct(i,j);
                        }
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),8);
                        cout<<"║"<<endl<<"╠";
                        for(int i=1;i<=n-1;i++) cout<<" ═ ╬";
                        cout<<" ═ ╣"<<endl;
                }
                for(int j=1;j<=n;j++)
                {
                        ct(n,j);
                }
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),8);
                cout<<"║";
                cout<<endl<<"╚";
                for(int i=1;i<=n-1;i++) cout<<" ═ ╩";
                cout<<" ═ ╝";
                int z=getch();
                f(z);
        }
        cout<<"GAME OVER --------"<<h;
        return 0;
}
作者: bilegole    时间: 2020-8-2 08:50
#在这里快速回复#        百万留名 你火了
作者: dingbohao    时间: 2020-8-8 20:01
2020年8月8日前来考古
作者: kayn-    时间: 2020-8-17 21:26
感谢大佬翻译和转载