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;
}
相关推荐
娅娅梨几秒前
C++ 错题本--not found for architecture x86_64 问题
开发语言·c++
兵哥工控5 分钟前
MFC工控项目实例二十九主对话框调用子对话框设定参数值
c++·mfc
汤米粥6 分钟前
小皮PHP连接数据库提示could not find driver
开发语言·php
Fuxiao___7 分钟前
不使用递归的决策树生成算法
算法
冰淇淋烤布蕾9 分钟前
EasyExcel使用
java·开发语言·excel
我爱工作&工作love我12 分钟前
1435:【例题3】曲线 一本通 代替三分
c++·算法
拾荒的小海螺15 分钟前
JAVA:探索 EasyExcel 的技术指南
java·开发语言
马剑威(威哥爱编程)40 分钟前
哇喔!20种单例模式的实现与变异总结
java·开发语言·单例模式
娃娃丢没有坏心思42 分钟前
C++20 概念与约束(2)—— 初识概念与约束
c语言·c++·现代c++
lexusv8ls600h42 分钟前
探索 C++20:C++ 的新纪元
c++·c++20