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;
}
相关推荐
达柳斯·绍达华·宁8 分钟前
感知算法引入时序模型的优势
深度学习·算法·卷积神经网络
基础不牢,地动山摇...15 分钟前
jbcTemplate和namedParameterJdbcTemplate详解
java·开发语言·数据库
科研小白_d.s17 分钟前
数据结构的基础知识
java·开发语言·数据结构
时髦的琉璃6817 分钟前
HumanNeRF:Free-viewpoint Rendering of Moving People from Monocular Video 精读
人工智能·算法
街 三 仔19 分钟前
【C语言零基础入门篇 - 9】:文件操作
c语言·开发语言
代码雕刻家19 分钟前
数据结构-3.3.栈的链式存储实现
c语言·数据结构·算法
wangdachui_ooi19 分钟前
ESP32工程添加.c .h文件及常见错误
c语言·开发语言
沫刃起22 分钟前
Codeforces Round 971 (Div. 4) G1. Yunli‘s Subarray Queries (easy version)
数据结构·c++·算法
gopher951123 分钟前
go/函数
开发语言·golang
小七蒙恩31 分钟前
java的排序算法,代码详细说明
java·算法·排序算法