CS 330 Lecture 23 – Matrix/vector and templates
Agenda
- operator<<
- operator()
- named constructor pattern
- templates
TODO
- Read Microsoft’s reference on C++ templates: http://msdn.microsoft.com/en-us/library/y097fkab(v=vs.80).aspx.
Code
Vector.h
#ifndef VECTOR_H #define VECTOR_H #include <iostream> #include <fstream> class Vector2 { public: Vector2(); Vector2(float x, float y); // write a subscript operator float& operator[](int index); const float& operator[](int index) const; Vector2 operator+(const Vector2& other); // overload a print operator private: float x; float y; }; std::ostream& operator<<(std::ostream& out, const Vector2& v); #endif
Vector.cpp
#include <cassert> #include "Vector.h" Vector2::Vector2() : x(0.0f), y(0.0f) { } Vector2::Vector2(float x, float y) : x(x), y(y) { } float& Vector2::operator[](int index) { assert(index >= 0 && index <= 1); return index == 0 ? x : y; } const float& Vector2::operator[](int index) const { assert(index >= 0 && index <= 1); return index == 0 ? x : y; } Vector2 Vector2::operator+(const Vector2& other) { return Vector2(x + other.x, y + other.y); } std::ostream& operator<<(std::ostream& out, const Vector2& v) { out << v[0] << "," << v[1]; }
drawer.cpp
#include <cmath> #include <iostream> #include "Matrix.h" #include "Vector.h" int main() { Matrix2 transform; float radians = 60.0f * 3.14159f / 180.0f; transform(0, 0) = cos(radians); transform(0, 1) = -sin(radians); transform(1, 0) = sin(radians); transform(1, 1) = cos(radians); transform(0, 2) = 0.0f; transform(1, 2) = 0.0f; transform(2, 0) = 0.0f; transform(2, 1) = 0.0f; transform(2, 2) = 1.0f; Vector2 point(1.0f, 0.0f); for (int i = 0; i < 6; ++i) { point = transform * point; std::cout << point << std::endl; } /* Vector2 point2(1.0f, 2.0f); */ /* Vector2 sum = point + point2; */ /* Vector2 sum = point.operator+(point2); */ /* std::cout << "sum[0]: " << sum[0] << std::endl; */ /* std::cout << "sum[1]: " << sum[1] << std::endl; */ /* std::cout << "sum: " << sum << std::endl; */ /* std::cout << "point[0]: " << point[0] << std::endl; */ /* std::cout << "point[1]: " << point[1] << std::endl; */ /* point[0] = 11.0f; */ /* std::cout << "point[0]: " << point[0] << std::endl; */ /* std::cout << "point[1]: " << point[1] << std::endl; */ /* point[0] // point.getX() */ /* point[1] // point.getY() */ }
Haiku
Typeless languages.
Puzzles whose pieces don’t lock.
Pain makes a picture.
Puzzles whose pieces don’t lock.
Pain makes a picture.