面向对象三大特征:封装、继承、多态。
#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个访问权限限定符,用于设置结构体中数据成员和数据成员的访问权限。
? ? ? ? ? ? ? ? 公有成员(函数、数据),可悲任何函数访问(结构体内和结构体外)
? ? ? ? ? ? ? ? 与继承有关
? ? ? ? ? ? ? ? 私有成员(函数、数据),只能被结构体内部函数访问。
#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权限。
//语法格式
class 类名 {
private:
成员类型
成员类型
public:
成员数据:
成员数据:
protected:
成员数据:
成员数据:
};//特别注意;不要忘了
#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;
}
#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;
}