C++ 结构体(面向对象编程)

面向对象编程的优势

  • 相比于分而治之的结构化程序设计,强调大处着眼的面向对象程序设计的思想,更适合于开发大型软件。
  • 得益于数据抽象、代码复用等面象对象的固有特征,软件开发的效率获得极大的提升,成本却大幅降低。

面向对象三大特征:封装、继承、多态。

结构体

cpp 复制代码
#include <iostream>
using namespace std;

struct Compleac{
	double i;
	double r;

	void init(double rr, double ii) {
		i = ii;
		r = rr; 
	}

	double real() {
		return i;
	}

	double image() {
		return r;
	}
};

int main(int argc, const char *argv[])
{
	Compleac a;
	a.init(3,5);

	cout << a.real() << " + " << a.image() << "i" << endl;
	
	return 0;
}

将数据和操作数据的函数包装在一起的主要目的就是实现的封装和隐藏。隐藏就是不让结构体外的函数直接修改数据结构中的数据,只能通过结构的成员函数对数据进行修改。但上面的代码显然没能做到这一点。为此C++中新增了3个访问权限限定符,用于设置结构体中数据成员和数据成员的访问权限。

  • public

公有成员(函数、数据),可悲任何函数访问(结构体内和结构体外)

  • protected

与继承有关

  • private

私有成员(函数、数据),只能被结构体内部函数访问。

cpp 复制代码
#include <iostream>
using namespace std;

struct Compleac{
private:
	double i;
	double r;
public:
	void init(double rr, double ii) {
		i = ii;
		r = rr; 
	}

	double real() {
		return i;
	}

	double image() {
		return r;
	}
	void set_real(double value) {
		i = value;
	}

	void set_image(double value) {
		r = value;
	}
};

int main(int argc, const char *argv[])
{
	Compleac a;
//	a.i = 8;//因为private缘故无法直接修改
	a.init(3,5);

	a.set_real(8);
	a.set_image(10);

	cout << a.real() << " + " << a.image() << "i" << endl;
	
	return 0;
}

struct还是容易和传统C语言中的结构混淆,C++中引进了功能和struct相同,但更安全的数据类型:类。更安全是指结构体将所有成员都默认为public,不够安全;类中成员默认为private权限。

cpp 复制代码
//语法格式
class 类名 {
private:
    成员类型
    成员类型
public:
    成员数据:
    成员数据:
protected:
    成员数据:
    成员数据:
};//特别注意;不要忘了
cpp 复制代码
#include <iostream>
using namespace std;

class Compleac{
private:
	double i;
	double r;
public:
	void init(double rr, double ii) {
		i = ii;
		r = rr; 
	}

	double real() {
		return i;
	}

	double image() {
		return r;
	}
	void set_real(double value) {
		i = value;
	}

	void set_image(double value) {
		r = value;
	}
};

int main(int argc, const char *argv[])
{
	Compleac a;
//	a.i = 8;//因为private缘故无法直接修改
	a.init(3,5);

	a.set_real(8);
	a.set_image(10);

	cout << a.real() << " + " << a.image() << "i" << endl;
	
	return 0;
}
cpp 复制代码
#include <iostream>

using namespace std;

class stu {

private:
	string m_name;
	int age;
	int num;
public:
	void set_name(const string & name) {
		m_name = name;
	}

	void set_age(int s_age) {
		age = s_age;
	}

	void set_num(int s_num) {
		num = s_num;
	}
	void who() {
		cout << "我叫" << m_name << "我今年" << age << "我的学号是" << endl;
	}
};

int main(int argc, const char *argv[])
{
	stu s;
	s.set_name("小明");
	s.set_age(18);
	s.set_num(8499);
	s.who();

	return 0;
}
相关推荐
virus59453 小时前
悟空CRM mybatis-3.5.3-mapper.dtd错误解决方案
java·开发语言·mybatis
一匹电信狗3 小时前
【LeetCode_547_990】并查集的应用——省份数量 + 等式方程的可满足性
c++·算法·leetcode·职场和发展·stl
初次见面我叫泰隆3 小时前
Qt——3、常用控件
开发语言·qt·客户端
鱼跃鹰飞3 小时前
Leetcode会员尊享100题:270.最接近的二叉树值
数据结构·算法·leetcode
Queenie_Charlie3 小时前
小陶的疑惑2
数据结构·c++·树状数组
无小道4 小时前
Qt——QWidget
开发语言·qt
时艰.4 小时前
Java 并发编程之 CAS 与 Atomic 原子操作类
java·开发语言
梵刹古音4 小时前
【C语言】 函数基础与定义
c语言·开发语言·算法
筵陌5 小时前
算法:模拟
算法
梵刹古音5 小时前
【C语言】 结构化编程与选择结构
c语言·开发语言·嵌入式