c++面向過程和麵向物件
using namespace std;
class Dog
{
public:
char name[64];
//面向物件,方法在類的內部,因為物件的本質是class型別的變數,方法在類內部時,物件呼叫自身內部的方法就可以完成需求,即以物件為中心的程式設計思想
void eat(char *food)
{
cout << name << " eat " << food << endl;
}
};
//面向過程,方法(即函式)在類的外面,方法不屬於類
void eat(class Dog &dog, const char *food)
{
cout << dog.name << " eat " << food << endl;
}
//圓的周長
double getCircleGirth(double r)
{
return 2 * 3.14 * r;
}
//圓的面積
double getCircleArea(double r)
{
return 3.14 * r * r;
}
//命名規範
//1.類的名字首字母大寫
//2.方法的名字首個單詞全小寫,其餘單詞首字母大寫
//面向物件
class Circle
{
public:
void setR(double r)
{
my_r = r;
}
double getCircleGirth()
{
return 2 * 3.14 * my_r;//my_r為類內部私有成員變數,類內部的方法可以直接呼叫,不會產生歧義
}
double getCircleArea()
{
return 3.14 * my_r * my_r;
}
private:
//circle類的私有成員,即圓的半徑
double my_r;
//下面一段程式碼的寫法是錯誤的,首先初始化類的物件時,變數與變數是同級且互不干擾的
//my_r初始化時是沒有值的,也就是是亂碼,當my_girth初始化時是2 * 3.14 * my_r(亂碼),當呼叫物件的方法時,雖然my_r被重新賦值了,但是my_girth與my_r此時是同級且互不相關的,所以這種寫法是錯誤的
//float my_girth = 2 * 3.14 * my_r;
};
int main()
{
Dog dog;
strcpy_s(dog.name, strlen("dahuang") + 1, "dahuang");
//面向過程,以方法(函式)為中心
eat(dog, "beaf");//"beaf"為字串常量,型別為const char *,所以在宣告函式時,函式第二個引數因為const char *型別,宣告char *型別會報錯
//面向物件,以物件(變數)為中心
char food[64] = "apple";//這種定義,food為區域性變數,不在常量區了
//const char *food = "apple"
dog.eat(food);
double r = 10;
double girth;
double area;
girth = getCircleGirth(r);
area = getCircleArea(r);
cout << "circle girth=" << girth << endl;
cout << "circle area=" << area << endl;
Circle circle;
circle.setR(10);
cout << "circle girth=" << circle.getCircleGirth() << endl;
cout << "circle area=" << circle.getCircleArea() << endl;
return 0;
}