学完C学C++(3)对象和类


/*
对象和类
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`

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值