Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions Arrays/Heap.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
//there is no way of knowing the size of array in c++;but there is a way cause when you delete this heap memory compiler needs to know the size of array but its comprimising

#include <iostream>
#include <array>

class Entity
{
public :

static const int exampleSize = 5;//constexpr will explained later which is constant expression
int* example[exampleSize];//suppose we changed it to a heap we first get the Entity memory adress which leads to the array its a jumping across the memory so [better to switch it to stack]

std::array<int, 5> another;//type and size

Entity()
{


int a[5];

int count = sizeof(a) / sizeof(int);//size means bytes ,count means no of elements

//example->size();//we cant do like this like some other languages for heap in Entity class
for(int i = 0; i < another.size(); i++)
example[i] = 2;//constructor which initializes

}
};

int main()
{

Entity e;

/*int example[5];
for(int i = 0; i < 5; i++)
example[i] = 2;*///we moved into the Entity class


//int* another = new int[5];
//for(int i = 0; i < 5; i++)
//another[i] = 2;


//delete[] another;


std::cin.get();
}
//this is based on heap allocated memory with new keyword
//we need to manually delete this
//stack created it will ends when we get out of curly bracket int example[5]
//heap created more over the stack cause of the life times most probably suppose if we need to return the array inside of our funtion

//in c++ 11 there is called standard array which has inbuilt datastructures used rather than the normal raw array
//it includes bounds checking and it keeps tracking size of arrray
Binary file added Arrays/Heap.exe
Binary file not shown.
23 changes: 23 additions & 0 deletions Arrays/Log.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#include <iostream>

int main()
{
int example[5];
int* ptr = example;


for (int i = 0; i < 5; i++)
//example[i] = 2;//this is a text an offset to this memory of array



example[2] = 5;//for index 2 its start at 9th byte we are writting an offset of 8 bytes from a pointer
*(ptr + 2) = 6;//we are dereferencing this pointer way of writting and changing value from 5 to 6
*(int*)((char*)ptr + 8) = 6;//this is the way of writting in single bit[char] and even in int data type of 4 bytes


std::cin.get();
}

//arrays are always stored in rows ; each integer of 4 bytes total 20 bytes;
//array is just a pointer here it is a int pointer
Binary file added Arrays/Log.exe
Binary file not shown.
27 changes: 27 additions & 0 deletions Arrays/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
//in java we have no modifier = default modifier
//in c# we have such as internal[these are topics in visibility]
/*Arrays in C++ are a collection of multiple elements of the same type stored in contiguous memory locations (one after another).[in rows]
They are one of the most basic and important data structures in C++.*/
//lua language starts from index 1;c++ is 0
//its like having multiple variables in a single variable
//arrays mostly work with for loops[indexable loops];without it we need to set manually the example array

#include <iostream>

int main()
{
int example[5]; //array type and name mentioned its contain 5 integers
example[0] = 2;
example[4] = 4;//last index

example[-1] = 5;
example[17] = 21;//we get memory access violation [in debug mode we get errors not in release mode]


std::cout << example[0] << std::endl;//with mentioning index, we get underlying data type
std::cout << example << std::endl;//actual array print memory adress cause its a pointer type



std::cin.get();
}
78 changes: 78 additions & 0 deletions Interfaces/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*Pure virtual function in C++ is the key feature that lets you create interfaces (or abstract classes that behave like interfaces).
What is a Pure Virtual Function?
A pure virtual function is a virtual function that:

Has = 0 at the end
Has no implementation in the base class (or sometimes just a dummy one)
Forces every derived (child) class to provide its own implementation
we cant instantiate the interface class [only sub classes we can and have to]
Interfaces are just classes in c++ with unimplemented methods acting as template of source unlike other languages as java or c#*/


#include <iostream>
#include <string>

class Printable

{
public :
virtual std::string GetClassName() = 0;//now every class have to contain GetClassName function to implement

};

class Entity : public Printable//made a sub class
{
public :
virtual std::string GetName() { return "Entity"; }//by removing body and equating to 0 makes a pure virtal funtion
std::string GetClassName() override { return "Entity"; }

};

class Player : public Entity //no need of printable
{
private :
std::string m_Name;
public :
Player(const std::string& name)
: m_Name(name) {}

std::string GetName() override { return m_Name; }
std::string GetClassName() override { return "Player"; }
};

void PrintName(Entity* entity)
{
std::cout << entity->GetName() << std::endl;
}

class A : public Printable
{
public :
std::string GetClassName() override {return "A"; }

};


void Print(Printable* obj)//this is for printing names of class and type which has GetClassName funtion and make Printable a pointer
{
std::cout << obj->GetClassName() << std::endl;
}
int main()
{

Entity* e = new Entity();//cant instantiate the Entity class if it is pure virtual funtion and we need to give a sub class where the funtion is implemented eg Player("")
// PrintName(e);


Player* p = new Player("Suhas");
//PrintName(p);

Print(e);
Print(p);
Print(new A());//it is a memory leak



std::cin.get();
}
//we can only instantiate the class if it actually has all those pure virtual functions implemented[all funtions implemented]
Binary file added Interfaces/main.exe
Binary file not shown.
47 changes: 47 additions & 0 deletions Mutable--keyword/Lambda.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#include <iostream>
#include <string>

class Entity
{
private :
std::string m_Name;
mutable int m_DebugCount = 0;

public :
const std::string& GetName() const
{
m_DebugCount++;
return m_Name;
}

};

int main()
{

class Entity e ;
e.GetName();

int x = 8;
auto f = [=]() mutable
//we can write &x or x or = or &
{
//std::cout << "Hello" << std::endl;
//x++;//by value = we get error we need to get it through local variable so better to use mutable keyword

/* int y = x;
y++;
std::cout << y << std::endl;*/

x++;//we passed it through value through mutable keyword
std::cout << x << std::endl;

};

f();
//x = 8 cause we pased through value than reference
std::cin.get();
}
/*lambda is a little through away funtion
you can write and
assign it to the variable quickly */
31 changes: 31 additions & 0 deletions Mutable--keyword/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/*the application of mutable mostly with lambdas and const
its like mutable reversing the meaning of const*/

#include <iostream>
#include <string>

class Entity
{
private :
std::string m_Name;
mutable int m_DebugCount = 0;

public :
const std::string& GetName() const//const and ref
//making methods const so not to modify the class

{
m_DebugCount++;//its for supppose how many times we debugging
return m_Name;
}

};

int main()
{

class Entity e ;
e.GetName();//we will do if the method is const

std::cin.get();
}
42 changes: 42 additions & 0 deletions String - Literals/Log.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#include <iostream>
#include <string>

#include <stdlib.h>

int main()
{

using namespace std::string_literals;//gives no of funtions for convenience

std::string name0 = std::string("Cherno") + "hello!";//cant do cause you cant add 2 raw literals directly
std::string name0 = "Cherno"s + "hello!";//this s returns a standard string and u8 for normal string and L infront of the string literals for wide string


std::u32string name0 = U"Cherno"s + U" hello";//for wide string it is wstring and R for row

const char* example = R"(Line1
Line2
Line3
Line4)";

const char* ex = "Line1\n"
"Line2\n"
"Line3\n";



const char* name = u8"Cherno";//made with utf 8 similar to remaining ones [ unicode transformation format ]
const wchar_t* name2 = L"Cherno";//wide and this is 2 bytes per character[but variable for such as linux and windows]

const char16_t* name3 = u"Cherno";//2 bytes per character or 16 bits a character using string
const char32_t* name4 = U"Cherno";//32 bits character or 4 bytes per character



std::cin.get();
}

/*string literals are always stored in read only memory
so i cant equate a char pointer to a string litreral
which is a READ ONLY MEMORY
we can use a const char array */
20 changes: 20 additions & 0 deletions String - Literals/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#include <iostream>
#include <string>

#include <stdlib.h>
#include <cstring>

/*just a standard c library include 3 funtions and
its a string literal also written as
"Suhas"; 0[this is numeric zero]*/

int main()
{
const char name[8] = "Che\0rno";

/*8 cause it even ends with \0*/

std::cout << strlen(name) << std::endl;

std::cin.get();
}
Binary file added String - Literals/main.exe
Binary file not shown.
37 changes: 37 additions & 0 deletions Strings - working/Log.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#include <iostream>
#include <string>

void PrintString(const std::string& string)//creating copy of that std::string class

{
// string += "h"; by removing the const and the refernce keywords and its just a read only function
std::cout << string << std::endl;

}

int main()
{
std::string name = "Suhas";// + "hello!";process of appending strings
name += "hello!";

std::string name = std::string("Suhas") + "hello";
PrintString(name);
bool contains = name.find("no") != std::string::npos;//to find text in our string

/*npos is the illegal position for that find
and name.find returns position of that no thing*/


name.size();

/*strlen(s) for the length of the string char* s
and strcpy for copying of the strings*/



std::cout << name << std::endl;

std::cin.get();

} /* string copying in funtions are quite slow
strings can be addable than char ptrs */
Loading