#include <iostream> // 没有 .h 要注意
using namespace std; // 告诉编译器的命名空间 using为命名空间的关键词
// 面向对象的三大特征是继承,多态和封装
//自定义一个命名空间
namespace A{
int x=12;
void fun(){ // 方法
cout<<"namespace A"<<endl;
}
}
using namespace A; // 声明命名空间A 行声明了命名空间 A 后, 才能直接使用 fun();否则要写成 A::fun();
/* class 定义类就像结构体一样,只不过类有方法,可以放函数
* 类中的变量有三种属性 private(私有的数据) public(公有的数据) protected(保护的数据)
* 默认不写就是 private属性的
* 类是创建对象的模板,一个类可以创建多个对象
* cin 和 cout 代替了 scanf 和 printf
*/
/* 创建对象 */
class Dog
{
public:
string name; //狗的名字 string 是 C++的数据类型
int age; //狗的年龄
void run(){
cout<<"狗在跑"<<endl;
}
private:
double weight; // protected和private 在外部是无法访问的
};
/* */
int main()
{
// 声明了命名空间的用法
x=12;
cout<<"X="<<x<<endl;
fun();
// 未声明命名空间的用法
A::x=14;
cout<<"X="<<A::x<<endl;
A::fun();
// 从栈中示例化对象 对象一般是小写
Dog dog1;
dog1.age=12;
dog1.name="旺财";
cout << dog1.name << endl; // cout输出 cin 输入
// 从堆中示例化对象 创建要使用new 要是有delete删除 结构体的间接访问 指针创建 ->访问
Dog *dog2 = new Dog; // 从堆中实例化对象需要开辟内存,指针会指向那个内存,如果 new 没有申请内存成功, p 即指向 NULL
dog2->name="花花";
cout << dog2->name << endl; // cout输出 cin 输入
delete dog2; //删除对象 释放内存,将 dog2 重新指向 NULL
dog1.run(); //使用方法 必须要加类的前缀
return 0;
}