//
// main.cpp
// Basic
//
// Created by 06 on 15/1/9.
// Copyright (c) 2015年 黄永锐. All rights reserved.
//
#include <iostream>
using namespace std;
//
struct NSObject{//负责内存管理的类
bool init(){
return true;
}
};
#pragma 结构体中的变量 不写权限 默认都是公开的。 类中,不写权限,默认都是私有的。
//C++的继承是单冒号: public是公开继承
struct UIButton :public NSObject{
private: //成员变量 一般都是私有的,然后给它提供公开的set get 接口方法
int _tag;
public:
//对于OC来说 创建对象都有一个类方法+
//在C++中 有个类似的 是静态方法 都是通过类名调用的
static UIButton* button(){//返回值类型是UIButton类型的指针
//创建对象
//第一步是开辟空间
UIButton *m_button = new UIButton;//这里并不像OC的alloc 创建出来计数器就+1,在C++中没有引用计数器的概念所以没有加一减一。。。开辟空间就new,释放就delete
//第二步是初始化
if (m_button->init()) {//指针访问方法用箭头
//如果是OC里面的话 这里还会调用 autorelease()
//第三部返回对象的指针
return m_button;
}
//如果初始化失败
//销毁空间
delete m_button;
//防止野指针
m_button = nullptr;
return NULL;
}
// 返回布尔值判断是否初始化成功
bool init() {
#pragma 注意原理 子类初始化一定先要调用父类的初始化方法(因为父类的初始化里面可能给某个变量赋值了,如果你没有调用父类的初始化,那么你继承下来的就没有值)
if (!NSObject::init()) {
return false;//父类初始化失败
}
//初始化子类自己的东西
return true;
}
//成员变量的set get方法
int getTag(){
return _tag;
}
void setTag(int tag){
//如果在OC里面有这么一个方法self.tag = tag;会有问题吗?有!死循环!
_tag = tag;
}
//模拟点击button的时候
void touch(){
cout << "Button被点中" << endl;
}
#pragma 问题来了,我现在希望点中的时候英雄移动(不是打印一句话,而是英雄对象调用他自身的移动方法) 怎么办???
};
//主函数
int main(){
//通过类方法创建按钮
UIButton *button = UIButton::button();
button->touch();//
return 0;
}