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;
}
相关推荐
Aotman_1 小时前
JS 按照数组顺序对对象进行排序
开发语言·前端·javascript·vue.js·ui·ecmascript
千金裘换酒8 小时前
LeetCode 移动零元素 快慢指针
算法·leetcode·职场和发展
方璧8 小时前
限流的算法
java·开发语言
wm10438 小时前
机器学习第二讲 KNN算法
人工智能·算法·机器学习
NAGNIP8 小时前
一文搞懂机器学习线性代数基础知识!
算法
NAGNIP8 小时前
机器学习入门概述一览
算法
Hi_kenyon8 小时前
VUE3套用组件库快速开发(以Element Plus为例)二
开发语言·前端·javascript·vue.js
曲莫终8 小时前
Java VarHandle全面详解:从入门到精通
java·开发语言
byxdaz9 小时前
C++内存序
c++