ZIPC++类入门程序源码240717 5.83KB

ms_liao需要积分:4(1积分=1元)

资源文件列表:

Beginner.zip 大约有8个文件
  1. Beginner/array.cpp 256B
  2. Beginner/class.cpp 4.17KB
  3. Beginner/const.cpp 1.94KB
  4. Beginner/implicit.cpp
  5. Beginner/lambda.cpp 1.83KB
  6. Beginner/new.cpp 589B
  7. Beginner/string.cpp 2.19KB
  8. Beginner/

资源介绍:

C++类入门程序源码240717
#include <iostream> class Printable{ public: virtual std::string GetClassName() = 0; }; class Entity : public Printable{ public: enum Level : unsigned short{ low = 0, mid, high }; Entity(){ // 构造函数,用于初始化 x = 10; y = 20; std::cout << "Created Entity!" << std::endl; } Entity(int new_x){ // 函数重载:相同的方法名,不同的参数 x = new_x; std::cout << "Created Entity!" << std::endl; } ~Entity(){ // 析构函数,销毁对象时执行,清理堆栈分配的内存 std::cout << "Destoryed Entity!" << std::endl; } void SetLevel(Level lv){ level = lv; } void Move(int xa, int ya){ x += xa; y += ya;} int get_x(){ return x; } int get_y(){ return y; } void Print(){ std::cout << x << " " << y << " " << level << std::endl; } virtual std::string GetType(){ return "Entity"; } // ->虚函数 //virtual std::string GetType() = 0; // ->纯虚函数, //提供接口,强制子函数实现。Entity不可实例化,需实例化子类。 // 如果子类不覆写该函数接口,子类也不可实例化。 std::string GetClassName() override { return "Entity"; } private: // private只有Entity类或者友元类可以访问。protect=可继承private int x; int y; Level level = low; }; class Player : public Entity/* , Printable */{ //继承。父子同时继承同一个类,覆写同一个函数,会出现歧义 public: Player(const std::string& name):Name(name){ } std::string GetName(){ return Name; } void Print(){ std::cout << get_x() << get_y() << Name << std::endl; } std::string GetType(){ return "Player"; } std::string GetClassName() override { return "Player"; } private: std::string Name; }; class Person{ public: Person() : m_Name("Unknown"), m_Score(0){} // 可能需要按顺序写 Person(const std::string& name) : m_Name(name), m_Score(0){} // 这么初始化变量的好处是,不会在该对象作为其他对象的private时被初始化两次,浪费性能。 // eg: 在Entity类:{private: Example m_example; public:m_Example(8);} // 会显示创建了两次对象。 // 如果是:Entity():m_Example(Example){} void GetName(){ std::cout<< m_Name << std::endl; } private: int m_Score; std::string m_Name; }; void PrintName(Entity* entity){ std::cout << entity->GetType() << std::endl; } void Print(Printable* obj){ std::cout << obj->GetClassName() << std::endl; } int main(){ //类的实现和继承 //Entity entity1; //entity1.SetLevel(Entity::high); // enum看作一个命名空间 // Entity entity2(20); // entity2.Print(); // 20 0 0 y没有初始化 // Player player1("Player233"); // player1.Print(); // Player player2(player1.GetName()); // player2.Print(); //虚函数 // Entity* e = new Entity(); // std::cout << e->GetType() << std::endl; // Player* p = new Player("aname"); // std::cout << p->GetType() << std::endl; // Entity* entity = p; // std::cout << entity->GetType() << std::endl; //期望player,但是entity,则需要在entity的GetType加virtual ->虚函数 //无virtual Entity; 有则Player //或者将子函数写为:std::string GetType() override {} //提高可读性,并且当父类中无可覆写函数时会报错提示。 //纯虚函数 Player *p = new Player("aono"); Person p1; p1.GetName(); Person p2("Cherno"); p2.GetName(); // 在栈和堆上创建对象的区别: // 以上都是创建在堆栈里,main()结束后销毁。 // 创建在栈内的数据,在一个作用域结束之后(一对花括号内),里面的内存会被全部销毁。 // 如果不希望对象在某个子函数中创建,还没来得及用就销毁,那就需要在堆中创建对象。 Person *person = new Person("Cherno"); (*person).GetName(); person->GetName(); // 这两种调用方法等效 delete person; }
100+评论
captcha
    类型标题大小时间
    ZIPgec6818蜂鸣器LED内核模块文件下载(驱动)61.66KB9月前
    ZIPbuyigua1~2bak33.57MB9月前
    ZIP基于Python的车牌检测和识别系统源码.zip22.17MB9月前
    ZIPNavicat软件zip压缩包20.66MB9月前
    ZIPgec6818蜂鸣器LED内核模块文件下载(驱动)28.93KB9月前
    ZIP桌面应用开发 + PyQt + Qt Quick + 示例代码 + 快速入门1.2KB9月前
    ZIP《ANSYS+SpaceClaim直接建模指南与CAE前处理应用解析》(第五章实例文件)7.39MB9月前
    ZIPtcpudp-2.1.1204.76KB9月前