c++面向对象编程最主要的三个特点:封装,继承,多态。
类与对象
1.世上万事万物都可以抽象成对象,具有相同属性的对象的集合称为类
2.每个对象都有成员属性(自己的属性),成员函数(自己的行为)
3.class与struct的区别
在c++中sturct和class唯一的区别在于默认的访问权限不同,sturct默认权限为公共,class默认权限为私有
#include"iostream"
using namespace std;
#include<string>
class c1 {
int A;
};
int main() {
class c1 p;
p.A = 10;//错误,默认访问权限为私有
return 0;
}
#include"iostream"
using namespace std;
#include<string>
struct c2 {
int a;
};
int main() {
struct c2 p;
p.a = 10;//访问权限为公共的
return 0;
}
例如:求圆的周长
#include"iostream"
using namespace std;
#define Π 3.14
class yuan {
public:
int r;//成员属性:圆的半径r
double zhouchang() {
return 2 * Π * r;
}
};//成员行为,成员函数:圆的周长
int main() {
class yuan p;
p.r = 10;//赋值圆的半径
cout << "圆的周长为:" << p.zhouchang() << endl;;
return 0;
}
例:设计一个学生类,属性有名字和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
#include"iostream"
using namespace std;
#include<string>
class student {
public:
string name1;//成员属性
int id1;
void show_name1_id() {
cout << "学生姓名"<<" " << name1<<endl << "学生学号" <<" "<< id1 << endl;
}//成员行为 成员函数
};
int main() {
class student p;
p.name1 = "徐";
p.id = 3344;
p.show_name1_id();
return 0;
}
2.对象的定义
定义好类之后,直接书写对象名
<类名><对象名>
3.类的封装
类的关键字
public: //共有成员
protected: //保护成员
private: //私有成员
构造函数和析构函数
构造函数特点:
1.不需要写void数据类型
2.构造函数支持函数重载
3.构造函数的函数名与类名是一致的
4.用户如果自己不写构造函数的话,编辑器会自动生成一个空实现的构造函数
空实现的构造函数:
1.无形参值
#include"iostream"
using namespace std;
#include<string>
class student{
public:
student() {cout<<"这是一个不带参数的构造函数"<<ensl;};
//private:
int main() {
student p;
return 0;
}
带参数的构造函数
#include"iostream"
using namespace std;
#include<string>
class student{
public:
student(int age) {
m_age = age;
cout << "这是一个带参数的构造函数" << endl;
};
private:
int m_age;
int main() {
student p;
p.m_age(5);
return 0;
3.拷贝构造
#include"iostream"
using namespace std;
#include<string>
class student{
public:
student(student & t) {
cout << "这是一个拷贝构造函数" << endl;
};
private:
int m_age;
int main() {
student p2(p1);
return 0;
}
析构函数:
~student() {
}
参数初始化
一般初始化:
#include"iostream"
using namespace std;
#include<string>
class person{
public:
person(int a=0, int b=0, int c=0) {
m_a = a;
m_b = b;
m_c = c;
}
void print() {
cout << m_a <<" " << m_b<<" " << m_c <<" " << endl;
}//一般初始化
private:
int m_a;
int m_b;
int m_c;
};
int main() {
person p(12, 45, 78);
p.print();
return 0;
}
初始化列表:
#include"iostream"
using namespace std;
#include<string>
class person{
public:
person(int a=0, int b=0, int c=0) :m_a (a),m_b (b),m_c(c){}//初始化列表
void print() {
cout << m_a <<" " << m_b<<" " << m_c <<" " << endl;
}
private:
int m_a;
int m_b;
int m_c;
};
int main() {
person p(12, 45, 78);
p.print();
return 0;
}
对象成员:
当类中成员是其他类对象时,我们成为该成员是对象成员;
#include"iostream"
using namespace std;
#include<string>
class phone{
public:
phone(string name="小王") {
p_name = name;
}
string show() {
return p_name;
}
private:
string p_name;
};
class people{
public:
people(string name, phone t) {
m_name = name;
T = t;
}
void playgame() {
cout << m_name << "正在用" << T.show() << "玩游戏" << endl;
}
private:
string m_name;
phone T;
};
int main() {
phone p("iphone");
people a("小王", p);
a.playgame();
return 0;
}