On this page
Classes
basic class template
class Milk {
private:
int milk;
int private_func() {
return 69;
}
public:
Milk(int milk): milk(milk) {
}
~Milk() {} // deconstructor
void drink(int galOfPilk) {
printf("drinking %dL of Milk\n", galOfPilk);
printf("%d\n", this->private_func());
}
int getMilk() {
return this->milk;
}
};
int main(){
Ilk i;
i.drink(1);
Ilk* i = new Milk();
i->drink(1); // arrow syntax when i is a pointer
i->~Milk();
}
What is
`~Milk()`is a [de-constructor](https://www.geeksforgeeks.org/destructors-c/#) (its basically like `free()` in c). Unlike Java or python, C++ is not garbage collected so when we make an object we have to also manually delete it. The computer does not magically make it go away when you are done with it.Inheritance
class A{
...
};
class B: public A{
...
};
Creating objects
int main(){
Person* p = new Person(1,2,3); // heap allocated
Person p2(1,2,3); // stack allocated
}
class A{
public:
A(){
...
}
};
int main(){
A a; // Note: if your constructor does not take any arguments
}
Note: you will learn what stack and heap are in CSSE132 but for now we generally use stack allocated in Robomasters
Why use stack over heap?:
This is what the new
operator calls when ever it gets used.
Constructors
For constructors, there are 2 ways of doing it
class Person{
private:
int age;
int height;
int weight;
MyClass myClass;
public:
Person(int age, int height, int weight){
this->age = age;
this-> height = height;
this->weight = weight;
this->myClass(69);
}
};
constructor initializer list:
class Person{
private:
int age;
int height;
int weight;
public:
Person(int age, int height, int weight):age(age),height(height),weight(weight), myClass(69)
{
...
}
};
We generally use the second form because
NOTE: YOU CANT CALL CONSTRUCTORS WHEN DECLARED!!!
All together
#include <iostream>
#include <string>
using namespace std;
class Milk
{
private:
int milk;
int private_func() {
return 69;
}
public:
Milk(int milk): milk(milk) {
}
~Milk() {}
void drink(int galOfPilk) {
printf("drinking %dL of PILK\n", galOfPilk);
printf("%d\n", this->private_func());
}
int getMilk() {
return this->milk;
}
};
class Pilk : public Milk // inheritance
{
private:
string cola;
int numDrinks;
public:
Pilk(string cola, int numDrinks, int milk)
: cola(cola),
numDrinks(numDrinks),
Ilk(milk)
{
printf("pilk\n");
}
string getCola() {
return cola;
}
};
int main()
{
Ilk *i = new Ilk(420);
i->getMilk();
Pilk p("coco cola", 420, 2);
p.drink(1337);
i->~Ilk();
}
TODO: explain → arrow syntax
Exercise:
make 2 classes:
- Car
- string name
- getName()
- Vehicle
- int id
- void drive() // prints “vroom”