/*
对象和类
1.访问控制
private和public都是新的,公有的成员是外部与私有的桥梁。
在类中不写默认是private。
类中的方法(函数)完整名称包括类名 ClassName::func();
但是在类中使用方法不必加类名,类中成员相互访问也是自由的。
其余使用方法跟结构体是差不多的,不必多说。
class ClassName
{
private:
type var;
public:
type func();
}
2.构造函数和析构函数
构造:
目的是让人像用int一样用类。构造函数可以对类进行初始化 。
构造函数名字就是类名 ClassName ::ClassName(xxx,xxx,xxx);
构造函数的参数名称不能类成员同名。
构造函数使用有几种
ClassName c1=ClassName(...);
ClassName c1 (...);
还可以用new创建略。
用大括号创建ClassName c1={...,...}
析构
用来释放对象
形式为 波浪号ClassName();
析构函数的调用由编译器决定,里面的内容打印点字符就行了,如果使用new创建,析构就写delete,其他不管。
若使用ClassName c1=ClassName(...);创建对象,则会先生成一个临时对象,再赋值给c1,然后用析构函数释放临时的。
3.const成员函数
const ClassName c3=ClassName("123abc")
ClassName.show();//(show会显示"123abc,但是show()没有参数")
首先你声明一个const的对象,但是编译器不会运行这个对象的某个方法,因为你这个方法不能确保它不修改对象内容,所以需要
成员函数不想让它修改对象里的内容则应该这么写
void ClassName::show() const{}
也可以这么写 void ClassName::show(const ClassName * this) {}
这样就可以调用了
4.this指针
如果某个方法返回对象自己,然而这是在类里面,哪知道以后创建了啥对象,所以没有对象咋办,没有对象可以天天打游戏!!!!!
this就是指向对象自己的指针。有了this就有对象了。*this就是这个对象自己。
5.对象数组
现在你不仅在类里找到了对象,还可以用类创建一堆对象,还是五颜六色的,
ClassName c1[4]={
ClassName("blue","girl","chicken"),
ClassName("pink","boy","1"),
ClassName("green","boy","hat")
};
6.作用域
类的作用域只在类自己里面,要访问其函数(方法)就只有创建对象,想曹丕却没对象?
想创建一个作用域为类的常量(一个厕所7个老婆用)就可以用枚举或者加static const;
枚举在C++11可以前面加枚举名,像名称空间一样用如:MenuName a=MenuName::m1;
7.抽象数据类型
实例:用对象来实现栈。这种过程需要你抽象。
10章已结束,开始练习。
*/
#include <iostream>
#include <fstream>
#include<string.h>
#include "study.h"
#ifdef DAY4
//例题6,移动坐标
#ifndef Hfile
//头文件部分
class Move
{
private:
double x;
double y;
public:
Move(double a = 0, double b = 0);
~Move();
void showmove()const;
Move Move_add(const Move& m)const;
void reset(double a = 0, double b = 0);
};
#endif
Move::Move(double a , double b )
{
this->x = a;
this->y = b;
std::cout <<this<< " new xy:" << a <<" " << b << std::endl;
}
Move::~Move()
{
std::cout << this << " memary alerly free" << std::endl;
}
//显示坐标
void Move::showmove()const
{
std::cout <<this<< " xy:" << this->x << " " << this->y << std::endl;
}
//两坐标相加,返回一个对象
//这里我本来想改变this,不返回东西,结果书上后面加个const
//意思是让我不要改变两个对象,所以就这样设计
Move Move::Move_add(const Move& m)const
{
Move add_m;
add_m.x=this->x + m.x;
add_m.y=this->y + m.y;
return add_m;
}
//重置坐标
void Move::reset(double a, double b )
{
this->x = a;
this->y = b;
}
//测试
int main()
{
std::cout << "creat m1,m2,m3\n";
Move m1(1.14,5.14);
Move m2(3.14, 6.66);
Move m3;
std::cout << "m1:\n";
m1.showmove();
m1.reset(5.14, 1.14);
std::cout << "m2:\n";
m2.showmove();
std::cout << "m3:\n";
m3 = m2.Move_add(m1);
m3.showmove();
return 0;
}
#endif`
学完C学C++(3)对象和类
最新推荐文章于 2024-08-19 18:41:12 发布