Objekt Orientierte Programmierung C++

1.Funtion Overloading

C++ erlaubt,dass einige Funktion gleiches Names deklariert wird.Der Formale Parameter der Funktion müssen unterschidlich sein.Das heißt,Zahl,Typ und Reihenfolge des Parameters kann nicht unterschielich sein

复制代码
#include<stdlib.h>
#include<iostream>
using namespace std;
void fun(int i=30,int x = 10, int j = 20); void fun(double i, double j); int main() { //Default Value aus Funktion fun(); fun(100); fun(100,200); fun(100, 200, 300); //Function overloading fun(1.1, 1.2); system("pause"); return 0; } void fun(int i, int j, int k) { cout << i << "," << j << "," << k << endl; } void fun(double i, double j) { cout << i << "," << j << endl; }
复制代码

2.Speicherverwaltung

Falls wir eine Zeiger deklarieren,nach Programm fertig gemacht ist,sollen wir Zeiger löschen

复制代码
#include<stdlib.h>
#include<iostream>
using namespace std;

int main() 
{
    int*p = new int[1000];
    if (NULL == p)
    {
        system("pause");
        return 0;
    }
    p[0] = 10;
    p[1] = 20;
    cout << p[0] << "," << p[1] << endl;
    delete []p;
    p = NULL;
    system("pause");
    return 0;
}
复制代码

 

3.Objektorientierte Programmierung

Die Grundidee besteht darin, die Architektur einer Software an den Grundstrukturen desjenigen Bereichs der Wirklichkeit auszurichten, der die gegebene Anwendung betrifft. Ein Modell dieser Strukturen wird in der Entwurfsphase aufgestellt. Es enthält Informationen über die auftretenden Objekte und deren Abstraktionen, ihre Typen. Die Umsetzung dieser Denkweise erfordert die Einführung verschiedener Konzepte, insbesondere Klassen, Vererbung, Polymorphie .

Teacher.h

复制代码
#pragma once
#include <string>

using namespace std;
class Teacher
{
public:
    Teacher();
    Teacher(string nmae,int age);
    void setName(string _name);
    string getName();
    void setGender(string gender);
    string getGender();
    void setAge(int _age);
    int getAge();
    void teach();
private:
    string m_strName;
    string m_strGender;
    int m_iAge;
};
复制代码

 

Teacher.cpp

复制代码
#include "Teacher.h"
#include <string>
#include<iostream>
using namespace std;
Teacher::Teacher()
{
    m_strName = "Jim";
    m_iAge = 5;
    cout << "Teacher()" << endl;
}
Teacher::Teacher(string name, int age)
{
    m_strName = name;
    m_iAge = age;
    cout<<"Teacher(string name, int age)"<<endl;
}
void Teacher::setName(string _name)
{
    m_strName = _name;
}

string Teacher::getName()
{
    return m_strName;
}

void Teacher::setGender(string _gender)
{
    m_strGender = _gender;
}

string Teacher::getGender()
{
    return m_strGender;
}
void Teacher::setAge(int _age)
{
    m_iAge = _age;
}

int Teacher::getAge()
{
    return m_iAge;
}

void Teacher::teach()
{
    cout << "上课了.." << endl;
}
复制代码

 

main.cpp

复制代码
#include<iostream>
#include<stdlib.h>
#include<string>
#include "Teacher.h"
using namespace std;

int main()
{
    Teacher t1;
    t1.setName("11");
    t1.setAge(16);
    cout << t1.getName() << " " << t1.getAge() << " " << endl;
    system("pause");
    return 0;
}
复制代码

 

4.Grammatik

4.1 Namensraum(Namespace)

Vereinfacht bedeutet dies, dass innerhalb eines solchen Raumes jeder Name eindeutig ein Objekt bezeichnet.

复制代码
#include <stdlib.h>
#include <iostream>

using namespace std;

namespace A 
{
    int x = 1;
    void fun() 
    {
        cout << "A" << endl;
    }
}

namespace B
{
    int x = 2;
    void fun() 
    {
        cout << "B" << endl;
    }
    void fun2()
    {
        cout << "2B" << endl;
    }
}
using namespace B;
int main() {
    cout << A::x << endl;//Man kann auf x aus Namensraum A zugreifen
    B::fun();//Man kann fun() aus Namensraum B benutzen
    B::fun2();
    system("pause");
    return 0;
}
复制代码

4.2 Destructor Function

Falls wir Zeiger löschen,dann wird Destructor Function verwendet

4.3 Virtual Destructor Function

Wenn wir Destructor Function der Unterklasse verwenden,können wir virtual vor dem Funktion hinzufügen

4.4 Vererbung

Die Vererbung dient dazu, aufbauend auf existierenden Klassen neue zu schaffen, wobei die Beziehung zwischen ursprünglicher und neuer Klasse dauerhaft ist

4.5 Virtuelle Vererbung

Wenn a Basisklasse ist,b und c ist Unterklasse von a,d ist Unterklasse von b und c.Das heisst,es gibt bei Klasse d zwei gleiche Daten und Funktion der Klasse a

Virtuelle Vererbung kann sie verhindern

class b:virtual public a
class c:virtual public a

 

4.6 Initialisierungsliste

Sie kann Variable von Zitierung order Const initialisieren

Teacher(string name = "Jim", int age = 1,int m = 100);
Teacher::Teacher(string name,int age,int m):m_strName(name),m_iAge(age),m_iMax(m) { cout << "" << endl; }

 

4.7 Copy Constructor

Man kann einen Constructor kopieren

Teacher::Teacher(const Teacher&tea)
{
    cout << "Teacher(const Teacher&tea)" << endl;
}

 main.cpp

复制代码
#include<iostream>
#include<stdlib.h>

#include<string>
#include "Teacher.h"
using namespace std;


void test(Teacher t)
{

}

//拷贝构造函数只有拷贝和传递参数才会调用
int main()
{
    Teacher t1;
    Teacher t2 = t1;
    Teacher t3(t1);
    Teacher t4;
    //test(t4);
    cout << t1.getName() << " " << t1.getAge() << " " << endl;
    system("pause");
    return 0;
}
复制代码

 

4.8 "this" Zeiger

"this" Zeiger kann Mitgliedsvariable und externe Variable unterscheiden

this->n = n

Array.h

复制代码
#pragma once
class Array
{
public:
    Array(int len);
    ~Array();
    Array *setLen(int len);
    int getLen();
    Array *printInfo();
private:
    int len;
};
复制代码

Array.cpp

复制代码
#include<iostream>
#include "Array.h"
using namespace std;
Array::Array(int len)
{
    this->len = len;
    cout << "Array(int len)" << endl;
}

Array::~Array()
{

}

//Gleiche Auswirkung
//如Array Array::setLen(int len){return *this} Array *Array::setLen(int len) { this->len = len; return this; } int Array::getLen() { return len; } Array *Array::printInfo() { //cout << "len="<<len << endl; cout << this << endl; return this; }
复制代码

 

posted @   Rest探路者  阅读(647)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
levels of contents
点击右上角即可分享
微信分享提示