C++面向对象编程思想



C++面向对象编程思想

C 面向过程 从上往下执行 你有多少我执行多少 过程化 模块化 一个功能就是就是一个函数
基本数据类型 char short int long longlong float double

	C++新增加了 bool 类型
	1、bool型变量:
	a)大小与char类型相同;
	b)只接受2个数值:true(1)和false(0)
	c)别的数值提示截断,除了赋值0其他的值都是true(1)
	d)匹配六种关系运算符号以及3种逻辑运算符号(&& || !)

结构体 自定义数据类型

struct SPerson	//定义一个人
{
//成员	不加默认共有的
               string sName;
               bool sex;
                int age;
                int height;
                float weight;
private:
	float money;
//自我介绍
public:
	void Say()
	{
	cout<<"姓名:”<<sName<<"性别"<<sex<<"年龄"<<age<<"身高"<<height<<"体重"<<weight<<endl;
	}
//吃饭
	void eat()
	{
	cout<<"吃的山珍海味”<<endl;
	}
    
};

C++面向对象

C++ 既可以面向对象也可面向过程编程 面向每一个对象 对象中又分为属性和方法
类和对象
对象:一切皆对象 对象的具体 对象就是类的具体化
类:具有相同属性的集合 范围比较广 类是对象的抽象

面向对象的特点 封装、继承、多态、抽象

C++结构体就是类 C++里面结构体也可以定义函数
类具有成员属性和成员方法
结构体成员:
成员属性:(成员变量) 属性是固有的特性
成员方法:(成员方法) 能力

C++为了专门表示类 用class来定义

使用struct 来定义类和class来定义类是有区别的
1.使用struct 来定义类 所有的成员默认都是公有的(public)除非显式声明为私有的   
  所有的对象都是公有的 成员的访问权限不一样
2.为了和C语言当中的struct做区别
  如果使用class来定义 默认都是私有的(private)除非显式声明为其他类型
3.凡有成员函数C++推荐使用class关键字;
  没有成员函数的是纯数据的结构体,还是沿用struct关键字。
4.class工程管理:
  成员函数在类外编写,通过定义域::

类的里面不管共有的还是私有的 都可以访问

成员访问限定符:
public 共有的
private 私有的
protected 受保护的

C++构造函数 (专门进行初始化)不传参数的叫做默认构造函数 构造函数可以进行重载(多个参数 一个参数)看你传的是那个参数就调用那个构造函数
1.函数名要与类型名相同
2.没有返回值类型,没有返回值
3.不需要手动调用 ,定义好对象之后第一个调用的就是构造函数

析构函数 与我的构造函数相反, 主要是内存清理和回收
1.函数名 ~类型名
2. 没有返回值,没有参数
3.不需要手动调用(对象被销毁的时候,调用 )

示例代码:

class SPerson1	//定义一个人
{
public:
	//成员
	char* sName;
	char*  sex;
	int age;
	int height;
	float weight;
private:
	float money;

public:
	//设置信息
	void SetSInfo()
	{
		cout << "请输入姓名:" << endl;
		cin >> sName;
		cout << "请输入性别:" << endl;
		cin >> sex;
		cout << "请输入年龄:" << endl;
		cin >> age;
		cout << "请输入身高:" << endl;
		cin >> height;
		cout << "请输入体重:" << endl;
		cin >> weight;

	}
	/*void SetSInfo2(string n, string s, int a, int h, int w)
	{
		sName = n;
		sex = s;
		age = a;
		height = h;
		weight = w;

	}*/


	SPerson1() //构造函数 不传参数的叫默认构造函数
	{
		sName = new char[10]; //动态开辟的内存 要释放内存 就在析构函数里面来清理 这样内存就不会泄露
		sex = new char[10];
		strcpy_s(sName, sizeof(sName),"张三");
		strcpy_s(sex, sizeof(sex),"男");

		age = 30;
		height = 123;
		weight = 100;
	}
	SPerson1(string n) //重载一个参数构造函数 
	{

		sName = new char[10]; //动态开辟的内存 要释放内存 就在析构函数里面来清理 这样内存就不会泄露
		sex = new char[10];
		strcpy_s(sName, sizeof(sName),n.c_str()); //string转化c语言 c_str()
		strcpy_s(sex, sizeof(sex), "男");

		age = 30;
		height = 123;
		weight = 100;
	}
	SPerson1(string n, string s, int a, int h, int w) //全部参数重载
	{
		sName = new char[10]; //动态开辟的内存 要释放内存 就在析构函数里面来清理 这样内存就不会泄露
		sex = new char[10];
		strcpy_s(sName, sizeof(sName), n.c_str()); //string转化c语言 c_str()
		strcpy_s(sex, sizeof(sex), s.c_str());

		age = a;
		height = h;
		weight = w;

	}
	//析构函数
	~SPerson1()
	{	//空的话什么都不干
		//打印一句话 
		cout <<  sName<<"被析构了" << endl;

		delete[] sName;
		delete[] sex;
	}
	//自我介绍
	void Say()
	{
		cout << "姓名: " << sName << " 性别 " << sex << " 年龄 " << age << " 身高 " << height << " 体重 " << weight << endl;
	}
	//吃饭
	void eat()
	{
		cout << " 吃的山珍海味 " << endl;
	}


};

int main()
{
	
	/*SPerson p1 = { "马云","男",50 ,196 ,76 };
	p1.Say();
	p1.eat();

	SPerson p2 = { "马化腾","男",32 ,166 ,66 };
	p2.Say();
	p2.eat();*/

	/*SPerson p1 = { "马云","男",50 ,196 ,76 };
	p1.Say();
	p1.eat();

	SPerson p2 = { "马化腾","男",32 ,166 ,66 };
	p2.Say();
	p2.eat();*/

	SPerson1 p3; //调用默认构造函数
	//p3.SetSInfo();
	//p3.Say();

//	p3.SetSInfo2("张三","男",23,167,65);
	p3.Say(); //离开main函数后 就会发生析构

	SPerson1 p4("李四", "女", 12, 32, 12);//调用重载的构造函数
	p4.Say();

	//p3 ,p4是局部变量存在于栈中 先进后出
	
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jcrry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值