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;
}
相关推荐
Wang's Blog5 小时前
Go-Zero项目开发4: 用户服务搜索、详情与统一错误处理
开发语言·golang
我星期八休息5 小时前
网络编程—应用层HTTP协议
linux·运维·开发语言·前端·网络·网络协议·http
梅雅达编程笔记5 小时前
零基础学 Python 第14章 | 模块、包与第三方库
开发语言·python·django·numpy·pandas
Mr__Miss5 小时前
Java泛型完全指南:从入门到精通
java·开发语言·python
赵庆明老师5 小时前
Vben精讲:14-Vben远程加载语言包
开发语言·vben
jinyishu_6 小时前
模拟实现 C++ 栈和队列——从适配器模式看懂 STL 容器之美
java·c++·适配器模式
hehelm6 小时前
AI大模型接入SDK—通用模块设计
linux·开发语言·c++
什巳7 小时前
JAVA练习309- 二叉树的层序遍历
java·数据结构·算法·leetcode
梅雅达编程笔记8 小时前
零基础学 Python 第15章 | 类与对象:面向对象编程入门
开发语言·python·django·numpy·pandas
行思理8 小时前
微信支付“商家转账用户确认模式”,新手教程
java·开发语言·微信