struct linked_list* list = ...;
struct <название структуры>
{
<описание структуры>
}
struct <название типа> <название переменной>;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MarchingCubesMeshes
{
struct _8Bools
{
public _8Bools(byte val)
{
data = val;
}
public _8Bools(bool all_vals)
{
data = (byte)(all_vals ? 0xff : 0x00);
}
public byte data;
public bool this[byte pos]
{
get
{
Debug.Assert(pos< 8);
return ((1 << pos) & data) != 0;
}
set
{
Debug.Assert(pos < 8);
if (value)
{
data |= (byte)(1 << pos);
}
else
{
data &= (byte)~(1 << pos);
}
}
}
public void invert_bit(byte pos)
{
Debug.Assert(pos < 8);
data ^= (byte)(1 << data);
}
public _8Bools extract_part(byte from, byte count)
{
Debug.Assert(from <= 8);
Debug.Assert(count <= 8);
Debug.Assert(from + count <= 8);
byte mask = (byte)((0xff >> count) << from);
_8Bools result = this;
result.data ^= mask;
return result;
}
public _8Bools with_inverted_bit(byte pos)
{
_8Bools copy = this;
copy.invert_bit(pos);
return copy;
}
public void mirror(byte dimention)
{
Debug.Assert(dimention < 3);
_8Bools mirrored_bits = new _8Bools(false);
for(_8Bools i = 0; i.data < 8; ++i.data)
{
if(mirrored_bits[i.data])
{
continue;
}
_8Bools alter_i = i.with_inverted_bit(dimention);// тут я хотел написать " _8Bools alter_i = new _8Bools(i).invert_bit(dimention)" но метод возвращал void, а значит комбинация из конструктора копирования и метода не может стоять справа от знака =
bool ith_bit = this[i.data];
this[i.data] = this[alter_i.data];
this[alter_i.data] = ith_bit;
mirrored_bits[i.data] = true;
mirrored_bits[alter_i.data] = true;
}
}
public void rotate(byte axis_dimention)
{
//z = axis_dimention;
byte x = (byte)((axis_dimention + 1) % 3);
byte z = (byte)((axis_dimention + 1) % 3);
_8Bools rotated_bits = new _8Bools(false);
}
public static implicit operator _8Bools(byte initial_data)
{
return new _8Bools(initial_data);
}
}
}
// внизу быдет отмечена строчка, на которую надо обратить внимание. ===================
#include <iostream>
#include <random>
#include <stdexcept>
using namespace std;
class human
{
public:
enum class Gender_t
{
male,
female,
other
};
private:
string name_;
int birth_year_;
Gender_t gender_;
string about_me_ = "";
bool is_invalid_ = false;
bool is_alive_ = true;
public:
human& set_name(string val)
{
name_ = val;
return *this;
}
human& set_birth_year(int val)
{
birth_year_ = val;
return *this;
}
human& set_gender(Gender_t val)
{
gender_ = val;
return *this;
}
human& set_about_me(string val)
{
about_me_ = val;
return *this;
}
const string& get_name() const
{
return name_;
}
int get_age(int current_year) const
{
return current_year - birth_year_;
}
const Gender_t& get_gender() const
{
return gender_;
}
const string& get_about_me() const
{
return about_me_;
}
bool is_usefull()
{
return is_alive_ && (!is_invalid_);
}
human& go_to_war()
{
if (!is_usefull())
{
throw logic_error(name_ + " cant go to war");
}
switch (rand() % 3)
{
case 1:
cout << "rip " << name_ << endl;
is_alive_ = false;
break;
case 2:
cout << name_ << " screams: \"I DONT FEEL MY LEG! HEEEEELP! KILL ME!\"" << endl;
is_invalid_ = true;
break;
default:
cout << "tra-ta-ta-ta-ta, BOOOOOOOM" << endl;
break;
}
return *this;
}
};
int main()
{
human ivan;
ivan.set_name("ivan")
.set_birth_year(1999)
.set_gender(human::Gender_t::male);
cout << "name: " << ivan.get_name() << "\n"
<< "age: " << ivan.get_age(2022) << endl;
if (ivan.go_to_war().is_usefull()) // вот тут =======================================================
{
cout << ivan.get_name() << " can work and pay taxes" << endl;
}
else
{
cout << ivan.get_name() << " cant work and pay taxes" << endl;
}
}
// точка входа в программу почти в самом низу ==========================
#include <iostream>
using namespace std;
class human
{
public:
enum class Gender_t
{
male,
female,
other
};
private:
string name_;
int birth_year_;
Gender_t gender_;
string about_me_ = "";
public:
human& set_name(string val)
{
name_ = val;
return *this;
}
human& set_birth_year(int val)
{
birth_year_ = val;
return *this;
}
human& set_gender(Gender_t val)
{
gender_ = val;
return *this;
}
human& set_about_me(string val)
{
about_me_ = val;
return *this;
}
const string& get_name() const
{
return name_;
}
int get_age(int current_year) const
{
return current_year - birth_year_;
}
const Gender_t& get_gender() const
{
return gender_;
}
const string& get_about_me() const
{
return about_me_;
}
};
int main() // ================================================================ точка входа
{
human ivan;
ivan.set_name("ivan")
.set_birth_year(1999)
.set_gender(human::Gender_t::male);//мы сразу несколько сеттеров пишем к одному объекту, т.к. каждый сеттер возвращает ивана, то после сеттера к этой надписи можно добавить еще один сеттер, иван останется иваном, а не превратится в void
cout << "name: " << ivan.get_name() << "\n"
<< "age: " << ivan.get_age(2022) << "\n";
//распечатку enum чутка сложнее делать
}
name: ivan
age: 23
да, питон вроде бы как написан на крестах, кресты на ассемблере, а асемблер паяльником спаяли, можно повторить этот путь, но зачет так сложно, ой тоесть зачем так просто?
давай накопаем угля, возьмем песка, из песка и угля сделаем кремний, из кремния процессор, а там и до ассемблера недалеко.